Pagini recente » Cod sursa (job #1584740) | Cod sursa (job #1696976) | Cod sursa (job #577540) | Cod sursa (job #1781946) | Cod sursa (job #749037)
Cod sursa(job #749037)
#include<cstdio>
#include<cstring>
using namespace std;
int nr1,k,j,p,n,k1,i,x[100],ma[100],mul[500][500],ap[100][100],nr[100][100],b[100][100];
char a1[100];
void back()
{
k=1;
x[k]=0;
while(k>0)
{
while(x[k]<ma[k-1]+1&&k<=n)
{
x[k]++;
ma[k]=ma[k-1];
if(x[k]>ma[k]) ma[k]=x[k];
if(k==n&&ma[k]>1)
{
memset(ap,0,sizeof(ap));
memset(nr,0,sizeof(nr));
memset(nr,0,sizeof(mul));
for(i=1;i<=ma[k];i++)
{
for(j=1;j<=n;j++)
if(x[j]==i)
{
nr[i][0]++;
nr[i][nr[i][0]]=j;
}
for(j=1;j<=nr[i][0];j++)
for(p=1;p<=b[nr[i][j]][0];p++)
if(ap[i][b[nr[i][j]][p]]==0)
{
mul[i][0]++;
mul[i][mul[i][0]]=b[nr[i][j]][p];
ap[i][b[nr[i][j]][p]]=1;
}
}
for(i=1;i<=ma[k];i++)
{
for(j=1;j<=ma[k];j++)
if(i!=j)
{
for(p=1;p<=nr[j][0];p++)
if(ap[i][nr[j][p]]==1) break;
if(p>nr[j][0]) break;
}
if(j<=ma[k]) break;
}
if(i>ma[k])
nr1++;
}
else
if(k<n)
{
k++;
x[k]=0;
}
}
ma[k]=0;
k--;
}
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
scanf("%d\n",&n);
for(i=1;i<=n;i++)
{
gets(a1+1);
for(j=1;j<=n;j++)
if(a1[j]=='1')
{
b[i][0]++;
b[i][b[i][0]]=j;
}
}
back();
printf("%d\n",nr1);
return 0;
}