Pagini recente » Cod sursa (job #2430710) | Cod sursa (job #1447815)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Nmax 15
using namespace std;
int n, i, j, nr, w[Nmax], sol, cm;
int v[Nmax];
int a[Nmax][Nmax];
char s[Nmax];
int incsol(int nr)
{
int i, j;
if (nr == 1)
return 0;
for (i = 1; i <= nr; ++ i)
{
memset(w, 0, sizeof(w));
w[i] = 1;
cm = 0;
for (j = 1; j <= n; ++ j)
if (v[j] == i)
{
for (int k = 1; k <= n; ++ k)
if (a[j][k] == 1 && !w[v[k]])
w[v[k]] = 1,
++ cm;
}
for (j = 1; j <= nr; ++ j)
if (!w[j])
cm = 0;
if (cm != nr - 1)
return 0;
}
return 1;
}
void Back(int k, int nr)
{
if (k == n + 1)
sol += incsol(nr);
else
{
for (int i = 1; i <= nr + 1; ++ i)
{
v[k] = i;
if (i == nr + 1) Back(k + 1, nr + 1);
else Back(k + 1, nr);
v[k] = 0;
}
}
}
int main()
{
freopen("copii.in", "r", stdin);
freopen("copii.out", "w", stdout);
scanf("%d\n", &n);
for (i = 1; i <= n; ++ i)
{
gets(s + 1);
for (j = 1; j <= n; ++ j)
a[i][j] = s[j] - '0';
}
Back(1, 0);
printf("%d", sol);
return 0;
}