Cod sursa(job #422479)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 22 martie 2010 19:10:26
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
#include<string.h>
#define maxim(a,b) (a>b ? a : b)

int n,bc[14],sol;
char s[14][14];
int col[14][14];

int verifica(int gr)
{
    int i,j;
    if(gr==1)
        return 0;
    memset(col,0,sizeof(col));
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            if(bc[i]==bc[j])
                continue;
            if(s[i][j-1]=='1')
            {
                col[bc[i]][bc[j]]=1;
                break;
            }
        }
    for(i=1;i<=gr;i++)
        for(j=1;j<=gr;j++)
            if(!col[i][j] && i!=j)
                return 0;
    return 1;

}

void back(int poz,int gr)
{
    int i;
    if(poz==n+1)
    {
        sol+=verifica(gr);
        return ;
    }
    for(i=1;i<=gr+1;i++)
    {
        bc[poz]=i;
        back(poz+1,maxim(i,gr));
    }
}

int main ()
{
    int i;
    freopen("copii.in","r",stdin);
    freopen("copii.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%s",s[i]);
    back(1,0);
    printf("%d\n",sol);
    return 0;
}