Cod sursa(job #2036232)

Utilizator eragon0502Dumitrescu Dragos eragon0502 Data 10 octombrie 2017 15:32:19
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>

using namespace std;

int v[11],nrmax=0,n,sol=0,a[15][15],ok[15][15];

void afis()
{
    if(nrmax==1)
        return;

    for(int i=1;i<=10;++i)
        for(int j=1;j<=10;++j)
            ok[i][j]=0;

    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j)
        {
            if(a[i][j]==1)
                ok[v[i]][v[j]]=1;
        }
    }

    for(int i=1;i<=nrmax;++i)
        for(int j=1;j<=nrmax;++j)
        {
            if(ok[i][j]==0&&i!=j)
                return;
        }

    ++sol;

    return;
}

void bkt(int k)
{
    for(int i=1;i<=nrmax + 1;++i)
    {
        v[k]=i;
        //if(i==nrmax&&k!=n)
        if(k!=n)
        {
            if (i == nrmax + 1)
            {
                ++nrmax;
                bkt(k + 1);
                --nrmax;
            }
            else
            {
                bkt(k+1);
            }
        }
        else
        {
            if(i==nrmax+1)
            {
                ++nrmax;
                afis();
                --nrmax;
            }
            else
            afis();
        }
    }
}

int main()
{
    freopen("copii.in","r",stdin);
    freopen("copii.out","w",stdout);

    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j)
        {
            scanf("%1d",&a[i][j]);
        }
    }

    bkt(1);

    printf("%d",sol);

    return 0;
}