Pagini recente » Cod sursa (job #396452) | Cod sursa (job #2803593) | Cod sursa (job #2358177) | Cod sursa (job #748180) | Cod sursa (job #1169775)
#include <stdio.h>
#include <algorithm>
#define NMAX 11
using namespace std;
int N, mat[NMAX][NMAX], nr;
int verif (int team[NMAX], int nrech) {
int ok[NMAX][NMAX], i, j, k;
for (i = 1; i <= nrech; ++i)
for (j = 1; j <= N; ++j)
if (team[j] == i)
for (k = 1; k <= N; ++k)
if (mat[j][k])
ok[i][team[k]] = 1;
for (i = 1; i <= nrech; ++i)
for (j = 1; j <= nrech; ++j)
if (!ok[i][j] && i != j) return 0;
return 1;
}
void back (int pos, int team[NMAX], int nrech) {
int i;
if (pos == N + 1) {
if (nrech >= 2 && verif(team, nrech))
++nr;
return;
}
for (i = 1; i <= nrech + 1; ++i) {
team[pos] = i;
back(pos + 1, team, max(nrech, i));
}
}
int main() {
freopen ("copii.in", "r", stdin);
freopen ("copii.out", "w", stdout);
int i, j, team[NMAX];
char c;
scanf ("%d", &N);
for (i = 1; i <= N; ++i) {
scanf ("%c", &c);
for (j = 1; j <= N; ++j) {
scanf ("%c", &c);
if (c == '0') mat[i][j] = 0;
else mat[i][j] = 1;
}
}
back(1, team, 0);
printf ("%d\n", nr);
return 0;
}