Cod sursa(job #2481991)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 27 octombrie 2019 17:45:58
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <cmath>
using namespace std;
int x[20], n, cnt, ck[20][20];
char m[20][20];
ifstream in ("copii.in");
ofstream out ("copii.out");
void check(int k) {
    for(int i = 1;i <= k; i++)
        for(int j = 1; j <= k; j++)
            ck[i][j] = 0;
    for(int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++)
            if (m[i][j] == '1')
                ck[x[i]][x[j]] = true;
    }
    for (int i = 1; i <= k; i++)
      for (int j = 1; j <= k; j++)
          if (i != j && !ck[i][j])
              return;
    cnt ++;
}
void bkt(int p, int k) {
    if(p == n + 1) {
        check(k);
        return;
    }
    for(int i = 1; i <= k + 1; i ++){
        x[p] = i;
        bkt(p + 1, max(k, i));
    }
}
int main () {
    in >> n;
    for(int i = 1; i <= n; i ++) {
        for(int j = 1; j <= n; j ++) {
            in >> m[i][j];
        }
    }
    bkt(1, 0);
    out << cnt - 1;
    return 0;
}