Cod sursa(job #1638550)

Utilizator razvanlgu31Razvan Lungu razvanlgu31 Data 8 martie 2016 00:04:39
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 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;
                    return;
                }
        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;
}