Pagini recente » Cod sursa (job #554923) | Cod sursa (job #2471200) | Cod sursa (job #2664391) | Cod sursa (job #689678) | Cod sursa (job #2475794)
#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];
int dp[20][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 < n;++i) {
int el_current = i;
for (int j = 0; j < a[el_current].size(); ++j) {
int vecin_current = a[el_current][j];
if (v[el_current] != v[vecin_current] && dp[v[el_current]][v[vecin_current]] == 0) {
dim[v[el_current]] ++;
dp[v[el_current]][v[vecin_current]] = 1;
}
}
}
bool found = true;
for (int i = 0; i <= v_max; ++i) {
if (dim[i] != v_max) found = false;
}
if (found) {
cnt ++;
}
for (int i = 0; i < n; ++i) {
dim[i] = 0;
for (int j = 0; j < n; ++j) {
dp[i][j] = 0;
}
}
}
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);
}
}
}
bk(0, -1);
g << cnt;
return 0;
}