Pagini recente » Cod sursa (job #1585713) | Cod sursa (job #2170318) | Cod sursa (job #2630874) | Cod sursa (job #1203301) | Cod sursa (job #2475797)
#include <fstream>
#include <vector>
#define nmax 12
using namespace std;
char v[nmax][nmax];
vector <int> g[nmax];
int n, grup[nmax], sol;
void bkt(int k, int p)
{
if (k <= n) {
int i;
for (i = 1; i <= p; i++) {
g[i].push_back(k);
grup[k] = i;
bkt(k + 1, p);
grup[k] = 0;
g[i].erase(g[i].end() - 1);
}
g[p + 1].push_back(k);
grup[k] = p + 1;
bkt(k + 1, p + 1);
grup[k] = 0;
g[p + 1].clear();
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;
}