Cod sursa(job #1901318)

Utilizator pibogaBogdan piboga Data 3 martie 2017 21:06:56
Problema Copii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>

using namespace std;

ifstream fin ("copii.in");
ofstream fout("copii.out");

int nr[12],n,gr[12][12],g[12],u[12],z,i;
char a[12][12];

void bc (int k,int ng)
{
    int i,j,q;
    if (k>n)
    {
        if (ng<2) return ;
        for (i=1;i<=ng;++i)
        {
            for (j=1;j<=nr[i];++j)
            {
                for (q=1;q<=n;++q)
                {
                    if (a[gr[i][j]][q]=='1')
                    {
                        u[g[q]]=i; // g[q] este acoperita
                    }
                }
            }

            for (j=1;j<=ng;++j)
            {
                if (j!=i && u[j]!=i)
                {
                    return;
                }
            }
        }
        ++z;
        return;
    }

    for (i=1;i<=ng;++i)
    {
        gr[i][++nr[i]]=k;
        g[k]=i;
        bc(k+1,ng);
        --nr[i];
        //g[k]=0;
    }

    ++ng;
    gr[ng][++nr[ng]]=k;
    g[k]=ng;
    bc(k+1,ng);
    --nr[ng--];
}

int main()
{
    fin >> n;
    for (i=1;i<=n;++i)
    {
        fin >> a[i]+1;
    }
    bc(1,0);

    fout << z;

    return 0;
}