Cod sursa(job #827696)

Utilizator ericptsStavarache Petru Eric ericpts Data 2 decembrie 2012 15:20:58
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <cstring>
using namespace std;

char d[12][12];
bool pr[12][12];
int fnd = 0;
bool gr[12][12];
int parte[12];
int grupe=0;
int gas = 0;
int n;
void check()
{
    memset(gr,0,sizeof(gr));
    int i,j;
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            if(pr[i][j])
                gr[parte[i]][parte[j]]=1;
    for(i=1;i<=grupe;++i)
        for(j=1;j<=grupe;++j)
            if(i!=j && !gr[i][j])
                return ;
    ++gas;
}

void back(int copil)
{
    if(copil == n+1)
    {
        if(grupe >= 2)
            check();
        return ;
    }
    int i;
    for(i=1;i<=grupe;++i)
    {
        parte[copil] = i;
        back(copil+1);
    }
    ++grupe;
    parte[copil] = grupe;
    back(copil+1);
    --grupe;
}

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