Cod sursa(job #3152912)

Utilizator Darius09Cristinescu Darius Petre Darius09 Data 27 septembrie 2023 08:44:02
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

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

int N,nr = -1;
int st[15],prieten[15][15];
char s[15],viz[15][15];

int verif(int m){
    memset(viz,0,sizeof(viz));
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            if(prieten[i][j] == 1){
                viz[st[i]][st[j]] = 1;
            }
        }
    }
    for(int i = 1; i <= m; i++){
        for(int j = 1; j <= m; j++){
            if(i != j && viz[i][j] == 0){
                return 0;
            }
        }
    }
    return 1;
}

void bkt(int k,int m){
    if(k == N && verif(m) == 1){
        nr++;
    }
    if(k == N)
        return;
    for(int i = 1; i <= m + 1; i++){
        st[k] = i;
        bkt(k+1,max(m,i));
    }
}

int main()
{
    fin >> N;
    for(int i = 0; i < N; i++){
        fin >> s;
        for(int j = 0; j < N; j++){
            prieten[i][j] = s[j] - '0';
        }
    }
    bkt(0,0);
    fout << nr;
    return 0;
}