Pagini recente » Cod sursa (job #2157738) | Cod sursa (job #2612409) | Cod sursa (job #1908763) | Cod sursa (job #595016) | Cod sursa (job #2878061)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");
int nr,N,st[11];
bool p[11][11];
bool verif_sub(int a[]){
if(a[0]==1) return true;
for(int i=1;i<=a[0];++i)
for(int j=1;j<=a[0];++j){
if(i==j) ++j;
if(!p[j][i]) return false;
}
return true;
}
bool verif(int M){
if(M==1) return false;
int a[11];
bool ok=false;
for(int i=1;i<=M;++i){
a[0]=0;
for(int j=1;j<=N;++j)
if(st[j]==i) a[++a[0]]=j;
if(a[0]>1) ok=true;
if(!verif_sub(a)) return false;
}
return ok;
}
void backtracking(int k, int M){
for(int i=1;i<=M+1;++i){
st[k]=i;
if(k==N){
if(i<=M && verif(M)) ++nr;
else if(verif(M+1)) ++nr;
}
else{
if(i<=M) backtracking(k+1,M);
else backtracking(k+1,M+1);
}
}
}
int main(){
int i,j;
char ch;
fin>>N;
for(i=1;i<=N;++i)
for(j=1;j<=N;++j){
fin>>ch;
p[i][j]=(bool)(ch-'0');
}
st[1]=1;
backtracking(2,1);
fout<<nr;
fin.close();
fout.close();
return 0;
}