Pagini recente » Cod sursa (job #294842) | Cod sursa (job #2885898) | Cod sursa (job #1583899) | Cod sursa (job #1736333) | Cod sursa (job #2024318)
#include <cstdio>
#include <cstring>
using namespace std;
const int NMAX = 10;
char f[NMAX + 5][NMAX + 5];
bool ok[NMAX + 5][NMAX + 5];
int p[NMAX + 5], ans, n;
bool valid(int nr)
{
for (int i = 1; i <= nr; ++i)
for (int j = 1; j <= nr; ++j)
ok[i][j] = 0;
for (int i = 1; i <= n; ++i)
for (int j = i + 1; j <= n; ++j)
if (p[i] != p[j])
{
if (f[i][j] == '1')
ok[p[j]][p[i]] = 1;
if (f[j][i] == '1')
ok[p[i]][p[j]] = 1;
}
for (int i = 1; i <= nr; ++i)
for (int j = 1; j <= nr; ++j)
if (ok[i][j] == 0 && i != j)
return 0;
return 1;
}
void backt(int poz, int nr)
{
if (poz == n + 1)
{
ans += valid(nr);
return ;
}
for (int i = 1; i <= nr; ++i)
{
p[poz] = i;
backt(poz + 1, nr);
}
p[poz] = nr + 1;
backt(poz + 1, nr + 1);
}
int main()
{
freopen("copii.in", "r", stdin);
freopen("copii.out", "w", stdout);
scanf("%d\n", &n);
for (int i = 1; i <= n; ++i)
gets(f[i] + 1);
backt(1, 0);
printf("%d\n", ans - 1);
return 0;
}