Pagini recente » Cod sursa (job #1886683) | Cod sursa (job #1168183) | Cod sursa (job #1020499) | Cod sursa (job #2398519) | Cod sursa (job #2475538)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <cstdlib>
//#define f cin
#define NMAX 8001
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int n, v[20];
int cnt;
int dim[20];
vector<int> a[20];
bool valid(int k, int v_max) {
return true;
}
bool verif(vector<int> &b, int echipa_curenta, int v_max) {
int vis[12];
for (int i = 0; i < n; ++i) {
vis[i] = 0;
}
vis[echipa_curenta] = 1;
for (int i = 0; i < b.size(); ++i) {
int el_curent = b[i];
for (int j = 0; j < a[el_curent].size(); ++j) {
vis[v[a[el_curent][j]]] = 1;
}
}
for (int i = 0; i <= v_max; ++i) {
if (vis[i] == 0) return false;
}
return true;
}
void prelucrare(int v_max) {
if (v_max == 0) return;
for (int i = 0; i <= v_max; ++i) {
vector<int> b;
for (int j = 0; j < n; ++j) {
if (v[j] == i) {
b.push_back(j);
}
}
if (!verif(b, i, v_max)) return;
}
cnt ++;
}
void bk(int k, int v_max) {
for (int i = 0; i <= v_max + 1; ++i) {
v[k] = i;
if (valid(k, max(v_max, v[k]))) {
if (k == n - 1) {
prelucrare(max(v[k], v_max));
} else {
if (v[k] > v_max) {
bk(k + 1, v[k]);
} else {
bk(k + 1, v_max);
}
}
}
}
}
int main() {
f >> n;
for (int i = 0; i < n; ++i) {
string s;
f >> s;
for (int j = 0; j < s.size(); ++j) {
if (s[j] == '1') {
a[i].push_back(j);
dim[i] ++;
}
}
}
bk(0, -1);
g << cnt;
return 0;
}