Pagini recente » Cod sursa (job #1863396) | Cod sursa (job #2611886) | Cod sursa (job #465787) | Cod sursa (job #2468750) | Cod sursa (job #668908)
Cod sursa(job #668908)
#include<cstdio>
using namespace std;
char s[100];
long nc,p[100],q[100],nr,n,a[100],i,j,pp,qq;
void soll()
{
long i;
for(i=1;i<=nc;++i)
for(j=1;j<=nc;++j)
if(i!=j)
if((q[i]&p[j])==0) return;
nr++;
}
void backtracking(long k)
{
long j;
if(k-1==n){if(nc>1)soll();}
else
{
for(j=1;j<=nc;++j){
pp=p[j];
p[j]|=(1<<(k-1));
qq=q[j];
q[j]|=a[k];
backtracking(k+1);
p[j]=pp;
q[j]=qq;
}
nc++;
p[nc]=(1<<(k-1));
q[nc]=a[k];
backtracking(k+1);
nc--;
}
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
scanf("%ld\n",&n);
for(i=1;i<=n;++i){
gets(s);
for(j=1;j<=n;++j)
if(s[j-1]=='1') a[i]|=(1<<(j-1));
}
backtracking(1);
printf("%ld\n",nr);
return 0;
}