Pagini recente » Cod sursa (job #354093) | Cod sursa (job #2557305) | Cod sursa (job #2038094) | Cod sursa (job #3133980) | Cod sursa (job #421979)
Cod sursa(job #421979)
#include<stdio.h>
#define Nmax 40
int N,v[Nmax][Nmax],mul[Nmax][Nmax],co[Nmax],rez,veri[Nmax][Nmax];
char car;
void afis()
{
for(int i=1;i<=N;++i)
{
for(int j=1;j<=mul[i][0];++j)
printf("%d ",mul[i][j]);
printf("\n");
}
}
int acces(int a,int b)
{
int z,ok=0,ok1=0;
for(int i=1;i<=mul[a][0]&&!ok;++i)
{
z=mul[a][i];
for(int j=1;j<=N&&!ok;++j)
{
if(v[z][j]==1&&co[j]==b)
{
//printf("%d %d\n",z,j);
ok=1;
}
}
}
for(int i=1;i<=mul[b][0]&&!ok1;++i)
{
z=mul[b][i];
for(int j=1;j<=N&&!ok1;++j)
{
if(v[z][j]==1&&co[j]==a)
ok1=1;
}
}
if(ok==1&&ok1==1)
return 1;
return 0;
}
int ver()
{
for(int i=1;i<=N&&mul[i][0]!=0;++i)
for(int j=1;j<=N&&mul[j][0]!=0;++j)
{
veri[i][j]=0;
}
for(int i=1;i<=N&&mul[i][0]!=0;++i)
{
for(int j=1;j<=mul[i][0];++j)
{
for(int z=1;z<=N;++z)
{
if(v[mul[i][j]][z]==1)
{
veri[i][co[z]]=1;
}
}
}
}
for(int i=1;i<=N&&mul[i][0]!=0;++i)
for(int j=1;j<=N&&mul[j][0]!=0;++j)
{
if(veri[i][j]==0&&i!=j)
{
// printf("%d %d\n",i,j);
return 0;
}
}
return 1;
}
void back(int k)
{
if(k==N+1)
{
if(mul[2][0]!=0)
if(ver())
{
++rez;
}
}
else
for(int i=1;i<=N;++i)
{
if(mul[i-1][0]!=0)
{
co[k]=i;
mul[i][++mul[i][0]]=k;
back(k+1);
mul[i][mul[i][0]--]=0;
co[k]=0;
}
}
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
scanf("%d\n",&N);
mul[0][0]=1;
for(int i=1;i<=N;++i)
{
for(int j=1;j<=N;++j)
{
scanf("%c",&car);
if(car=='1')
v[i][j]=1;
}
scanf("\n");
}
back(1);
printf("%d\n",rez);
}