Pagini recente » Cod sursa (job #2341931) | Cod sursa (job #499135) | Cod sursa (job #741857) | Cod sursa (job #1831135) | Cod sursa (job #1977842)
#include <cstdio>
#include <vector>
using namespace std;
int n;
int f[13];
int Sol, f2[13][13], a[13][13];
char s[13];
int v[13][13];
inline void back(int k, int c){
if(c == n){
if(k == 1) return ;
for(int i = 1; i <= k ; ++i)
for(int j = 0; j <= n ; ++j)
f2[i][j] = 0;
for(int i = 1; i <= k ; ++i){
for(int j = 1; j <= a[i][0] ; ++j){
for(int t = 1; t <= v[a[i][j]][0] ; ++t){
if(f[v[a[i][j]][t]] == i) continue ;
f2[i][0] = f2[i][0] + 1 - f2[i][f[v[a[i][j]][t]]];
f2[i][f[v[a[i][j]][t]]] = 1;
}
}
if(f2[i][0] < k - 1) return ;
}
++Sol;
return ;
}
for(int i = 1; i <= k ; ++i){
a[i][++a[i][0]] = c + 1;
f[c + 1] = i;
back(k, c + 1);
--a[i][0];
}
a[k + 1][++a[k + 1][0]] = c + 1;
f[c + 1] = k + 1;
back(k + 1, c + 1);
--a[k + 1][0];
}
int main(){
freopen("copii.in", "r", stdin);
freopen("copii.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n ; ++i){
scanf("%s", s);
for(int j = 0; j < n ; ++j)
if(s[j] == '1') v[i][++v[i][0]] = j + 1;
}
a[1][1] = 1;
a[1][0] = 1;
f[1] = 1;
back(1, 1);
printf("%d", Sol);
return 0;
}