Cod sursa(job #615717)

Utilizator osiceanu_paulOsiceanu paul osiceanu_paul Data 10 octombrie 2011 17:12:47
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>

using namespace std;

char a[12][12],b[12][12];
int n,sol[12],nr;

void prelucrare(int m)
{
    /*
    for(int i=1 ; i<=n ; i++) printf("%d ",sol[i]);
    printf("\n");
    */
    for(int i=1 ; i<=m ; i++)
        for(int j=1 ; j<=m ; j++)
            b[i][j] = '0';
    for(int i=1 ; i<=n; i++)
        for(int j=1 ; j<=n ; j++)
            if(a[i][j]=='1') b[sol[i]][sol[j]] = '1';
    for(int i=1 ; i<=m ; i++)
        for(int j=1 ; j<=m ; j++)
            if(i!=j && b[i][j] == '0') return;
    ++nr;

}

void bkt(int p,int m)
{
    if(p-1==n)
    {
        prelucrare(m);
        return;
    }

    for(int i=1;i<=m;i++)
    {
        sol[p]=i;
        bkt(p+1,m);
    }
    sol[p]=m+1;
    bkt(p+1,m+1);

}

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

    scanf("%d\n",&n);
    for(int i=1;i<=n;i++)
        gets(a[i]+1);
    bkt(1,0);
    printf("%d\n",nr-1);
    return 0;
}