Cod sursa(job #1246239)

Utilizator lacraruraduRadu Matei Lacraru lacraruradu Data 20 octombrie 2014 20:03:36
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>

using namespace std;

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

const int nmax = 10;
int n , maxim , sol[nmax + 1] , nr[nmax + 1] , a[nmax + 1][nmax + 1] , cnt;
bool v[nmax + 1][nmax + 1] , d[nmax + 1][nmax + 1];
char c;

void afisare();

void bkt(int p)
{
    if(p - 1 == n)
        afisare();
    else
        for(int i = 1 ; i <= maxim; i++)
        {
            int revine = maxim;
            maxim = max(maxim , i + 1);
            sol[p] = i;
            bkt(p + 1);
            maxim = revine;
        }
}

void afisare()
{
    if(maxim == 2)
        return;

    int i , j;

    for (i = 1; i <= n; i++)
        nr[i] = 0;

    for (i = 1; i <= n; i++)
        a[sol[i]][++nr[sol[i]]] = i;

    for(i = 1 ; i <= n ; i++)
        for(j = 1 ; j <= n ; j++)
            d[i][j] = 0;

    for(i = 1 ; i <= n ; i++)
    {
        for(j = 1 ; j < maxim ; j++)
            if(v[i][j])
                a[sol[i]][sol[j]] = 1;
    }

    for(i = 1 ; i < maxim ; i++)
        for(j = 1 ; j < maxim ; j++)
            if(i != j && v[i][j] == 0)
                return;
    cnt++;
}

int main()
{
    in >> n;

    for(int i = 1 ; i <= n ; i++)
        for(int j = 1 ; j <= n ; j++)
        {
            in >> c;
            v[i][j] = c - '0';
        }

    maxim = 1;

    cnt = 0;
    bkt(1);

    out << cnt;
    return 0;
}