Pagini recente » Cod sursa (job #950081) | Cod sursa (job #2845007) | Cod sursa (job #688872) | Cod sursa (job #2811299) | Cod sursa (job #825371)
Cod sursa(job #825371)
#include <cstdio>
int v[11];
int g[11];
int pr[11];
int u;
int n;
int sol;
bool ver(int gr);
void back(int i,int lvl)
{
if(((u|1)+1) == (1<<(n+1)))
{
if(lvl >= 3 && ver(lvl-1))
++sol;
return;
}
int init = u;
int initpr = pr[lvl];
int initg = g[lvl];
for(;i<=n;++i)
{
if(!(u & (1<<i)))
{
u |= (1<<i);
pr[lvl] |= v[i];
g[lvl] |= (1<<i);
back(i+1,lvl+1);
back(i+1,lvl);
u ^= (1<<i);
pr[lvl] ^=v[i];
g[lvl] ^= (1<<i);
}
}
}
bool ver(int gr)
{
int i,j,k,l;
int gas;
for(i=1;i<=gr;++i)
{
gas = 0;
for(j=1;j<=gr;++j)
{
if(i!=j)
if(!(pr[i] & g[j]))
return 0;
}
}
return 1;
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
setvbuf(stdin,NULL,_IOFBF,1024);
int i,j;
char c;
scanf("%d\n",&n);
for(j=1;j<=n;++j)
{
for(i=1;i<=n;++i)
{
scanf(" \n%c\n ",&c);
if(c-'0')
v[j] |= (1<<i);
}
}
back(1,1);
printf("%d\n",sol);
return 0;
}