Pagini recente » Cod sursa (job #853208) | Cod sursa (job #2664560) | Cod sursa (job #3267155) | Cod sursa (job #1977159) | Cod sursa (job #2475799)
#include <fstream>
#include <vector>
#define nmax 12
using namespace std;
char v[nmax][nmax];
int n, grup[nmax], sol;
void bkt(int k, int p)
{
if (k <= n) {
int i;
for (i = 1; i <= p; i++) {
grup[k] = i;
bkt(k + 1, p);
grup[k] = 0;
}
grup[k] = p + 1;
bkt(k + 1, p + 1);
grup[k] = 0;
return;
}
if (p == 1)
return;
int r[nmax][nmax] = {0};
int i, j;
/*
printf("\n");
for (i = 1; i <= p; i++) {
for (j = 0; j < g[i].size(); j++)
printf("%d ", g[i][j]);
printf("\n");
}
*/
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (v[i][j] == '1')
r[grup[i]][grup[j]] = 1;
for (i = 1; i <= p; i++)
for (j = 1; j <= p; j++)
if (i != j && r[i][j] == 0)
return;
/*
printf("This is a solution\n");
for (i = 1; i <= p; i++) {
for (j = 0; j < g[i].size(); j++)
printf("%d ", g[i][j]);
printf("\n");
}*/
sol ++;
}
int main()
{
int i;
freopen("copii.in","r",stdin);
scanf("%d", &n);
for (i = 1; i <= n; i++)
scanf("%s", v[i] + 1);
bkt(1, 0);
freopen("copii.out","w",stdout);
printf("%d\n", sol);
return 0;
}