Cod sursa(job #1727280)

Utilizator BlackNestaAndrei Manaila BlackNesta Data 10 iulie 2016 13:51:57
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("copii.in");
ofstream g("copii.out");

int n,x[20],sol;
bool a[20][20],b[20][20];
char s[20];

bool verif(int grupe)
{
    int i,j;
    for(i=1;i<=grupe;i++)
     for(j=1;j<=grupe;j++)
      a[i][j]=0;
    for(i=1;i<=n;i++)
     for(j=1;j<=n;j++)
      if(b[i][j])
       a[x[i]][x[j]]=1;
    for(i=1;i<=grupe;i++)
     for(j=1;j<=grupe;j++)
      if(!a[i][j]&&i!=j)
       return 0;
    return 1;
}

void my_back(int poz,int grupe)
{
    if(poz==n+1)
        sol += verif(grupe);
    else
    {
       int i=1;
       while(i<=grupe)
       {
        x[poz]=i;
        my_back(poz+1,grupe);
        i++;
       }
       x[poz]=grupe+1;
       my_back(poz+1,grupe+1);
    }
}
int main()
{
    f>>n;
    f.get();
    int i,j;
    for(i=1;i<=n;i++)
    {
        f.getline(s,19);
        for(j=0;j<n;j++)
            b[i][j+1]=s[j]-'0';
    }
    my_back(1,0);
    g<<sol-1 << "\n";
    g.close();
    return 0;
}