Cod sursa(job #1376487)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 5 martie 2015 17:36:13
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <string.h>
#define NMax 15
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int n, i, j, stack[NMax], Max[NMax], nr, prietenie[NMax][NMax];
char copii[NMax][NMax];

void test_copii()
{
    memset (prietenie, 0, sizeof (prietenie));
    for (int i=1; i<=n; i++)
        for (int j=1; j<=n; j++)
            if (stack[i] != stack[j] && copii[i][j] == '1')
                prietenie[stack[i]][stack[j]] = 1;
    int ok=1;
    for (int i=1; i<=Max[n] && ok == 1; i++)
        for (int j=1; j<=Max[n] && ok == 1; j++)
            if (prietenie[i][j] != 1 && i!=j)
                ok=0;
    if (ok == 1)
        nr++;
}

void back(int k)
{
    if (k == n+1)
        test_copii();
    else {
        for (int i=1; i <= 1 + Max[k-1]; i++) {
            stack[k] = i;
            Max[k] = max(i, Max[k-1]);
            back(k+1);
        }
    }
}

int main()
{
    f >> n;
    for (i=1; i<=n; i++)
        f>>copii[i]+1;
    back(1);
    g<<nr-1;
    return 0;
}