Cod sursa(job #851078)

Utilizator stoicatheoFlirk Navok stoicatheo Data 9 ianuarie 2013 15:03:52
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <cstring>
using namespace std;
 
char d[20][20];
int fnd = 0;
bool gr[20][20];
int parte[20];
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(d[i-1][j-1] == '1')
                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=0;i<n;++i)
        gets(d[i]);
    back(1);
    printf("%d\n",gas);
    return 0;
}