Cod sursa(job #1727277)

Utilizator BlackNestaAndrei Manaila BlackNesta Data 10 iulie 2016 13:41:02
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>

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 Back(int poz,int grupe)
{
    if(poz == n + 1) sol += verif(grupe);
    else
    {
       int i = 1;
       while(i <= grupe)
        {
            x[poz] = i;
            Back(poz + 1, grupe);
            i++;
        }
       x[poz] = grupe + 1;
       Back(poz + 1, grupe + 1);
    }
}
int main()
{
    f >> n;
    int i,j;
    for(i = 1; i <= n; i++)
        {
            f.getline(s, 11);
            for( j = 0; j < n; j++) b[i][j + 1] = s[j] - '0';
        }
    f.close();
    Back(1,0);
    g << sol << "\n";
    g.close();
    return 0;
}