Cod sursa(job #614472)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 6 octombrie 2011 17:12:12
Problema Copii Scor 100
Compilator cpp Status done
Runda bkt1_oct2011 Marime 0.92 kb
#include<cstdio>
int n,nrs,g[11];
char s[12][12];
bool a[12][12];
void read()
{
    freopen("copii.in","r",stdin);
    freopen("copii.out","w",stdout);
    scanf("%d\n",&n);
    for(int i=1;i<=n;i++)
        gets(s[i]+1);
}
void resetmat(bool a[12][12])
{
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
            a[i][j]=false;
}
void edit(int nrg)
{
    resetmat(a);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(s[i][j]=='1')
                a[g[i]][g[j]]=true;
    for(int i=1;i<=nrg;i++)
        for(int j=1;j<=nrg;j++)
            if(!a[i][j] && i!=j)
                return;
    ++nrs;
}
void back(int p,int nrg)
{
    if(p==n+1)
    {
        if(nrg>1)
            edit(nrg);
        return;
    }
    for(int i=1;i<=nrg;i++)
    {
        g[p]=i;
        back(p+1,nrg);
    }
    g[p]=nrg+1;
    back(p+1,nrg+1);
}
int main()
{
    read();
    back(1,0);
    printf("%d",nrs);
    return 0;
}