Cod sursa(job #2475885)

Utilizator flibiaVisanu Cristian flibia Data 17 octombrie 2019 18:50:38
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("copii.in");
ofstream out("copii.out");

int n, nr, col[15], mat[15][15];
char c[15][15];

void back(int lvl, int mx) {
    if (lvl == n + 1) {
        for (int i = 1; i <= mx; i++)
            for (int j = 1; j <= mx; j++)
                mat[i][j] = 0;

        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                mat[col[i]][col[j]] |= (c[i][j] == '1');

        bool flag = 1;
        for (int i = 1; i <= mx; i++)
            for (int j = 1; j <= mx; j++)
                if (i != j && !mat[i][j])
                    flag = 0;

        if (flag && mx - 1)
            nr++;

        return;
    }

    for (int i = 1; i <= mx + 1; i++) {
        col[lvl] = i;
        back(lvl + 1, max(mx, i));
    }
}

int main() {
    in >> n;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            in >> c[i][j];

    back(1, 0);
    out << nr;

    return 0;
}