Pagini recente » Cod sursa (job #567933) | Cod sursa (job #1627136) | Cod sursa (job #2043965) | Cod sursa (job #2443330) | Cod sursa (job #471469)
Cod sursa(job #471469)
#include <stdio.h>
#define MAXN 1030
char a[20][20];
char b[MAXN][MAXN];
int grupa[20];
int i,j,n,numar;
void back1(int lv, int conf1, int conf2)
{
if (lv==i) { back1(lv+1,conf1+(1<<i), conf2); return;}
if (lv==j) {back1(lv+1,conf1,conf2 + (1<<j)); return;}
if (lv==n)
b[conf1][conf2]=1;
else {
back1(lv+1,conf1+(1<<lv),conf2);
back1(lv+1,conf1,conf2+(1<<lv));
back1(lv+1,conf1,conf2);
}
}
void back(int lv, int nr)
{
if (lv==n){
int i,j;
for (i=1; i<=nr; i++)
for (j=1; j<i; j++)
if ((!b[grupa[i]][grupa[j]]) || (!b[grupa[j]][grupa[i]]))
return;
if (nr>=2)
numar ++;
}
else{
int i;
for (i=1; i<=nr; i++){
grupa[i] += (1<<lv);
back(lv+1,nr);
grupa[i] -= (1<<lv);
}
grupa[nr+1] = (1<<lv);
back(lv+1,nr+1);
}
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
scanf("%d\n",&n);
for (i=0; i<n; i++);
for (i=0; i<n; i++){
for (j=0; j<n; j++)
scanf("%c",&a[i][j]);
scanf("\n");
}
for (i=0; i<n; i++)
for (j=0; j<n; j++)
if (a[i][j]=='1')
back1(0,0,0);
numar =0;
back(0,0);
printf("%d\n",numar);
return 0;
}