Cod sursa(job #2475818)

Utilizator mirunazMiruna Zavelca mirunaz Data 17 octombrie 2019 17:12:01
Problema Copii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("copii.in");
ofstream out("copii.out");
#define N 11
int v[N], pos = 0;
char s[N][N];

void solve(int nr_grupe, int n) {
    if (nr_grupe < 1) {
        return ;
    }

    bool a[nr_grupe + 1][nr_grupe + 1];
    for (int i = 0; i < n; i ++) {
        int grupa1 = v[i + 1];
        for (int j = 0; j < strlen(s[i]); j ++) {
            if (s[i][j] == 1) {
                int grupa2 = v[j + 1];
                a[grupa1][grupa2] = true;
            }
        }
    }

    for (int i = 0; i < nr_grupe; i ++) {
        for (int j = 0; j < nr_grupe; j ++) {
            if (i != j && (!a[i][j] || !a[j][i])) {
                return ;
            }
        }
    }
    pos ++;
}

void bkt(int p, int et_max, int n) {
    if (p == n + 1) {
        solve(et_max, n);
        return ;
    }
    for (int i = 0; i <= et_max; i ++) {
        v[p] = i;
        bkt(p + 1, et_max, n);
    }
    v[p] = et_max + 1;
    bkt(p + 1, et_max + 1, n);
}

int main() {
    int n;
    in >> n;
    for (int i = 0; i < n; i ++) {
        in >> s[i];
    }
    v[1] = 0;
    bkt(2, 0, n);
    out << pos;
    return 0;
}