Cod sursa(job #1239325)

Utilizator margikiMargeloiu Andrei margiki Data 8 octombrie 2014 19:09:10
Problema Copii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
# include <fstream>
# include <cstring>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int i,j,n,nr,VV;
int ver[100][100],drum[100][100],a[100];
char s[100];
void back (int k)
{
    int i,j;
    if (k==n+1)
    {
        int ok=1;
        for (i=1; i<=n; ++i) //init
            for (j=1; j<=n; ++j)
                ver[i][j]=0;

        for (i=1; i<=n; ++i) //vad ce grupe se invecineaza
            for (j=1; j<=n; ++j)
                if (drum[i][j]) ver[a[i]][a[j]]=1;

        for (i=1; i<=nr; ++i)//verific
            for (j=1; j<=nr; ++j)
                if (i!=j && !ver[i][j]) ok=0;

        VV+=ok;
    }
    else
    {
        for (i=1; i<=nr; ++i)
        {
            a[k]=i;
            back(k+1);
        }

        a[k]=++nr;
        back(k+1);
        --nr;
    }
}
int main ()
{
    f>>n; f.get();
    for (i=1; i<=n; ++i)
    {
        f.getline(s,100);
        for (j=0; j<n; ++j)
        {
            if (s[j]=='1') drum[i][j+1]=1;
        }
    }
    back(1);
    g<<VV-1<<"\n";
    return 0;
}