Pagini recente » Cod sursa (job #981866) | Cod sursa (job #2447051) | Cod sursa (job #1252001) | Cod sursa (job #1868066) | Cod sursa (job #1447812)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Nmax 12
using namespace std;
int n, i, j, nr, w[Nmax], sol, Sol, cm;
int v[Nmax];
bool a[Nmax][Nmax];
char s[Nmax];
void incsol()
{
int i, j;
++ sol;
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)
{
-- sol;
break;
}
}
}
void Back(int k)
{
if (k == n + 1)
incsol();
else
{
for (int i = 1; i <= nr; ++ i)
{
v[k] = i;
Back(k + 1);
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';
}
for (nr = 2; nr <= n; ++ nr)
{
sol = 0;
Back(1);
Sol = Sol + (sol / nr);
}
printf("%d", Sol);
return 0;
}