Pagini recente » Cod sursa (job #1784658) | Cod sursa (job #1714026) | Cod sursa (job #308175) | Borderou de evaluare (job #409968) | Cod sursa (job #1355995)
#include<fstream>
using namespace std;
int n, i, j, sol, nr;
char a[13][13];
int g[13][13], f[13], v[13];
ifstream fin("copii.in");
ofstream fout("copii.out");
int verif(){
if(nr < 2){
return 0;
}
for(int i = 1; i <= n; i++){
if(f[i] == 0){
return 0;
}
}
for(int i = 1; i <= nr; i++){
for(int j = 1; j <= g[i][0]; j++){
for(int k = 1; k <= n; k++){
if(a[g[i][j]][k] == 1){
v[f[k]] = i;
}
}
}
for(int j = 1; j <= nr; j++){
if(v[j] != i && i != j){
return 0;
}
}
}
return 1;
}
void back(int k){
if(k == n + 1){
if(verif()){
sol++;
}
}
else{
for(int i = 1; i <= nr; i++){
g[i][++g[i][0]] = k;
f[k] = i;
back(k + 1);
f[k] = 0;
g[i][0]--;
}
nr++;
g[nr][0] = 1;
g[nr][1] = k;
f[k] = nr;
back(k + 1);
f[k] = 0;
g[nr][0] = 0;
nr--;
}
}
int main(){
fin>> n;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++){
fin>> a[i][j];
a[i][j] -= '0';
}
}
back(1);
fout<< sol <<"\n";
return 0;
}