Cod sursa(job #1613366)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 25 februarie 2016 12:50:48
Problema Copii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int n, i, j, ok, viz[20][20], v[20][20], nrg, nrt, gr[20];
char s[20];

void back(int k){
    int i, j;
    if(k==n+1)
    {
        if(nrg==1)
            return;
        for(i=1; i<=nrg; i++)
            for(j=1; j<=nrg; j++)
                viz[i][j]=0;
        for(i=1; i<=nrg; i++)
            viz[i][i]=1;
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                if(i!=j && v[i][j]==1 && gr[i]!=gr[j])
                    viz[ gr[i] ][ gr[j] ]=1;
        ok=0;
        for(i=1; i<=nrg; i++)
            for(j=1; j<=nrg; j++)
                if(viz[i][j]==0)
                {
                    ok=1;
                    break;
                }
        if(ok==0)
            nrt++;
    }
    else
    {
        for(i=1; i<=nrg; i++)
        {
            gr[k]=i;
            back(k+1);
        }
        nrg++;
        gr[k]=nrg;
        back(k+1);
        nrg--;
    }
}

int main(){
    f>>n;
    for(i=1; i<=n; i++)
    {
        f>>s;
        for(j=0; j<n; j++)
            v[i][j+1]=s[j]-'0';
    }
    back(1);
    g<<nrt<<"\n";
    return 0;
}