Pagini recente » Cod sursa (job #65761) | Cod sursa (job #2105862) | Cod sursa (job #2538854) | Cod sursa (job #41721) | Cod sursa (job #509711)
Cod sursa(job #509711)
#include <fstream>
#include <iostream>
using namespace std;
int n,a[101][101],x[101],rez;
void VerifSol(int mx){
int v[101][101];
for(int i=1;i<=mx;++i)
for(int j=1;j<=mx;++j)
v[i][j]=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(a[i][j]==1 && i-j && x[i]-x[j])
v[x[i]][x[j]]=1;
for(int i=1;i<=mx;++i)
for(int j=1;j<=mx;++j)
if(i-j && v[i][j]==0)
return ; //aici este diferenta de la 80 la 100: daca las sa mearga pana la capat, ia doar 80
rez++;
}
void back(int k,int nn){
for(int i=1;i<=nn;++i){
x[k]=i;
if(k==n)
VerifSol(nn);
else
back(k+1,nn);
}
x[k]=nn+1;
if(k==n)
VerifSol(nn+1);
else
back(k+1,nn+1);
}
int NC=0;
void Gen(int k){
if(k==n+1)
VerifSol(NC);
else{
for(int i=1;i<=NC;++i){
x[k]=i;
Gen(k+1);
}
NC++;
x[k]=NC;
Gen(k+1);
NC--;
}
}
int main(){
ifstream fin("copii.in");
ofstream fout("copii.out");
fin>>n;
char s[111];
fin.getline(s,111);
for(int i=1;i<=n;++i){
fin.getline(s,111);
for(int j=1;j<=n;++j)
a[i][j]=s[j-1]-'0';
}
Gen(1);
//back(1,0);
fout<<rez-1<<endl;
return 0;
}