Cod sursa(job #2878085)

Utilizator Vasile_AndreiVasile Andrei Calin Vasile_Andrei Data 25 martie 2022 19:39:05
Problema Copii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>

using namespace std;

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

short nr,N,st[11],a[11][11];
char p[11][11];

bool verif(short M){
    if(M==1) return false;
    short i,j;

    for(i=1;i<=M;++i)
        for(j=1;j<=M;++j)
            a[i][j]=0;

    for(i=1;i<=N;++i)
        for(j=1;j<=N;++j)
            if(p[i][j]=='1') a[st[i]][st[j]]=1;

    for(i=1;i<=M;++i)
        for(j=1;j<=M;++j)
            if(i!=j && a[i][j]==0) return false;

    return true;
}

void backtracking(short k, short M){
    for(short i=1;i<=M+1;++i){
        st[k]=i;

        if(k==N){
            if(i<=M){
                if(verif(M))++nr;
            }
            else if(verif(M+1)) ++nr;
        }
        else{
            if(i<=M) backtracking(k+1,M);
            else backtracking(k+1,M+1);
        }
    }
}

int main(){
    fin>>N;
    for(short i=1;i<=N;++i)
        fin>>(p[i]+1);

    backtracking(1,0);

    fout<<nr;

    fin.close();
    fout.close();
    return 0;
}