Cod sursa(job #1033455)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 16 noiembrie 2013 23:19:46
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
#include<cstring>
using namespace std;
int N,i,j,SOL,A[15],G; char S[15];
bool Bun[15][15],V[15][15];
bool Check()
{
    if(G==1) return 0;
    memset(Bun,0,sizeof(Bun));
    for(int i=1;i<=N;i++)
        for(int j=1;j<=N;j++)
            if(V[i][j]) Bun[A[i]][A[j]]=1;
    for(int i=1;i<=G;i++)
        for(int j=1;j<=G;j++)
            if(i!=j && !Bun[i][j]) return 0;
    return 1;
}
void Back(int K)
{
    if(K==N+1) SOL+=Check();
    else
    {
        for(int i=1;i<=G;i++) {A[K]=i; Back(K+1);} // bag intr-un grup existent
        A[K]=++G; Back(K+1); G--; // fac un nou grup
    }
}
int main()
{
    freopen("copii.in","r",stdin);
    freopen("copii.out","w",stdout);
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
        scanf("%s",S+1);
        for(j=1;j<=N;j++)
            if(S[j]=='1') V[i][j]=1;
    }
    Back(1); printf("%d\n",SOL);
    return 0;
}