Pagini recente » Cod sursa (job #400372) | Cod sursa (job #1538649) | Cod sursa (job #408117) | Cod sursa (job #2607853) | Cod sursa (job #417784)
Cod sursa(job #417784)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 15;
int N, K, Sol;
char A[MAXN][MAXN];
vector <int> grup[MAXN];
int g[MAXN];
void back(int k, int ng) {
if (k > N) {
if (ng < 2)
return;
int u[MAXN];
memset(u, 0, sizeof(u));
for (int i = 1; i <= ng; ++i) {
for (size_t j = 0; j < grup[i].size(); ++j)
for (int k = 1; k <= N; ++k)
if (A[grup[i][j]][k] == '1')
u[g[k]] = i;
for (int j = 1; j <= ng; ++j)
if (u[j] != i && i != j)
return;
}
++Sol;
return;
}
for (int i = 1; i <= ng; ++i) {
grup[i].push_back(k);
g[k] = i;
back(k+1, ng);
grup[i].pop_back();
}
grup[++ng].push_back(k);
g[k] = ng;
back(k+1, ng);
grup[ng--].pop_back();
}
int main() {
ifstream fin("copii.in");
ofstream fout("copii.out");
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> (A[i]+1);
back(1, 0);
fout << Sol << endl;
return 0;
}