Cod sursa(job #2636959)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 20 iulie 2020 19:34:07
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 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;
}