Cod sursa(job #457268)

Utilizator SpiderManSimoiu Robert SpiderMan Data 18 mai 2010 18:32:36
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>

using namespace std;

const char FIN[] = "copii.in";
const char FOU[] = "copii.out";
const int MAX = 17;

int N, V[MAX], nr;
char S[MAX][MAX];

int check (int poz)  // verifica daca e corecta solutia gasita
{
    int viz[MAX][MAX];

    memset(viz, 0, sizeof (viz));

    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
            if ( S[i][j] == '1' )
                viz[V[i]][V[j]] = 1;

    for (int i = 0; i < poz; ++i)
        for (int j = 0; j < poz; ++j)
            if (viz[i][j] == 0)
                if ( i != j)
                    return 0;
    return 1;
}

void copii (int k, int poz)
{
    if ( k == N )
        if (poz > 1)
            nr += check ( poz );
        else ;
    else
        for (int i = 0; i <= poz; ++i)
            if ( i < poz ) V[k] = i, copii (k + 1 , poz);    //vectorul cu solutii, V
            else V[k] = poz , copii (k + 1 , poz + 1);

}

int main()
{
    freopen(FIN, "r", stdin);
    freopen(FOU, "w", stdout);

    scanf("%d\n", &N);

    for (int i = 0; i < N; ++i)
        fgets( S[i] , MAX, stdin);

    copii (0, 0);

    printf("%d", nr);
}