Pagini recente » Cod sursa (job #2226989) | Cod sursa (job #446338) | Cod sursa (job #2721701) | Cod sursa (job #1886298) | Cod sursa (job #723810)
Cod sursa(job #723810)
#include <fstream>
#include<cstdio>
using namespace std;
int ok,nr,n,i,j,maxim,x[11],a[11][11],d[11][11];
char c;
ifstream f("copii.in");
ofstream g("copii.out");
int succesor(int k)
{int i;
maxim=0;
for(i=1;i<k;i++)
if(maxim<x[i])
maxim=x[i];
if(x[k]<=maxim && k<=n)
{x[k]++;
return 1;
}
return 0;
}
int valid(int k)
{return 1;}
int solutie(int k)
{if(k==n)
return 1;
return 0;}
void afisare(int k)
{int i,j;
if(x[k]>maxim)
maxim=x[k];
if(maxim>1)
{for(i=1;i<=maxim;i++)
for(j=1;j<=maxim;j++)
d[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]==1 && x[i]!=x[j])
d[x[i]][x[j]]=1;}
ok=1;
for(i=1;i<=maxim && ok==1;i++)
for(j=1;j<=maxim && ok==1;j++)
if(i!=j && d[i][j]==0)
ok=0;
if(ok)
nr++;}
void back()
{int ok,k;
k=1;
x[k]=0;
while(k>0)
{ok=0;
while(ok==0 && succesor(k))
if(valid(k))
ok=1;
if(ok==0)
k--;
else
if(solutie(k))
afisare(k);
else
{k++;
x[k]=0;
}
}
}
int main()
{f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ f>>c;
a[i][j]=c-48;
}
back();
g<<nr-1<<"\n";
f.close();
g.close();
return 0;
}