Pagini recente » Cod sursa (job #2662971) | Cod sursa (job #2545117) | Cod sursa (job #1556526) | Cod sursa (job #3217010) | Cod sursa (job #2475809)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("copii.in");
ofstream out("copii.out");
// nrij =in cate feluri pui i copii in j grupe
// nrij = nri-1j * j + nri-1,j-1
bool m[10][10];
int n, sol = 0;
inline bool verif(int *v, int nr_gr) {
if (nr_gr < 2)
return false;
bool rel[10][10] = {0};
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i != j && m[i][j] == 1) {
rel[v[i] - 1][v[j] - 1] = 1;
}
}
}
for (int i = 0; i < nr_gr; i++) {
for (int j = 0; j < nr_gr; j++) {
if (i != j && rel[i][j] != 1)
return false;
}
}
return true;
}
void back(int curr_size, int curr_pos, int *v) {
if (curr_pos == n) {
if (verif(v, curr_size))
sol++;
return;
}
for (int i = 1; i <= curr_size; i++) {
v[curr_pos] = i;
back(curr_size, curr_pos + 1, v);
}
v[curr_pos] = curr_size + 1;
back(curr_size + 1, curr_pos + 1, v);
}
int main() {
in >> n;
char a;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
in >> a;
if (a == '0')
m[i][j] = 0;
else
m[i][j] = 1;
}
}
int v[10] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
back(1, 1, v);
out << sol << '\n';
return 0;
}