Cod sursa(job #1516871)

Utilizator felixiPuscasu Felix felixi Data 3 noiembrie 2015 17:47:11
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

const int Nmax = 12;

char A[Nmax][Nmax];
int N, NOG, group[Nmax], D[Nmax][Nmax], solutions;

void read()
{
    ifstream f("copii.in");

    f >> N;

    for ( int i = 1; i <= N; ++i )
            f >> ( A[i] + 1 );

    f.close();
}

void validate()
{
    memset ( D, 0, sizeof ( D ) );

    for ( int i = 1; i <= N; ++i )
            for ( int j = 1; j <= N; ++j )
                    if ( A[i][j] == '1' )
                            D[ group[i] ][ group[j] ] = 1;

    for ( int i = 1; i <= NOG; ++i )
            for ( int j = 1; j <= NOG; ++j )
                    if ( i != j )
                            if ( D[i][j] == 0 )
                                    return;

    solutions++;
}

void back( int k )
{
    if ( k > N )
            if ( NOG >= 2 )
                validate();
            else;
    else
    {
        for ( int i = 1; i <= NOG; ++i )
        {
            group[k] = i;
            back( k + 1 );
        }

        NOG++;
        group[k] = NOG;
        back( k + 1 );
        NOG--;
    }
}

void print()
{
    ofstream g("copii.out");

    g << solutions << "\n";

    g.close();
}


int main()
{
    read();
    back( 1 );
    print();

    return 0;
}