Cod sursa(job #2266330)

Utilizator Tudor27Tudor Iacob Tudor27 Data 22 octombrie 2018 16:25:25
Problema Copii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n;
long long s;
bool a2[11][11],a[11][11];
int sol[11];

bool ver(int nre){
    if(nre==1){
        return false;
    }
    for(int i=1;i<=n;i++){
        for(int ii=1;ii<=n;ii++){
            a2[i][ii]=false;
        }
    }
    for(int i=1;i<=n;i++){
        for(int ii=1;ii<=n;ii++){
            if(i!=ii){
                if(a[i][ii]){
                    a2[sol[i]][sol[ii]]=true;
                }
            }
        }
    }
    for(int i=1;i<=nre;i++){
        for(int ii=1;ii<=nre;ii++){
            if(i!=ii){
                if(!a2[i][ii]){
                    return false;
                }
            }
        }
    }
    return true;
}

void f(int p,int nre){
    if(p-1==n){
        if(ver(nre)){
            s++;
        }
        return;
    }
    for(int i=1;i<=nre;i++){
        sol[p]=i;

        f(p+1,nre);
    }
    sol[p]=nre+1;

    f(p+1,nre+1);
}

int main()
{
    char x;
    fin>>x;
    n=x-'0';
    for(int i=1;i<=n;i++){
        for(int ii=1;ii<=n;ii++){
            fin>>x;
            if(x=='1'){
                a[i][ii]=true;
            }
        }
    }
    f(1,0);
    fout<<s;
    return 0;
}