Cod sursa(job #2831127)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 10 ianuarie 2022 20:57:51
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb

#include <bits/stdc++.h>

#define DIM 15
using namespace std;

bool v[DIM][DIM];
pair<short, short> x[DIM];
char s[DIM][DIM];
int n, i, j, sol;


void back(short pas) {

    if (pas == n + 1) {

        short k = x[n].second;

        if (k == 1)
            return;

        for (short i = 1; i <= k; ++i)
            for (short j = 1; j <= k; ++j)
                v[i][j] = 0;

        for (short i = 1; i <= n; i++)
            for (short j = 1; j <= n; j++)
                if (s[i][j] == '1')
                    v[x[i].first][x[j].first] = 1;

        bool ok = 1;
        for (short i = 1; i <= k; ++i)
            for (short j = 1; j <= k; ++j)
                if (i != j && !v[i][j]) {
                    ok = 0;
                    break;
                }

        sol += ok;

        return;
    }

    for (short i = 1; i <= n; ++i) {

        x[pas].first = i;
        if (x[pas].first <= x[pas - 1].second + 1) {
            x[pas].second = max(x[pas - 1].second, i);
            back(pas + 1);
            x[pas].second = x[pas - 1].second;
        }
    }
}


int main() {

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

    fin >> n;
    for (i = 1; i <= n; ++i)
        fin >> s[i] + 1;


    back(1);

    fout << sol;

    return 0;
}