Cod sursa(job #1511493)

Utilizator cristinamateiCristina Matei cristinamatei Data 26 octombrie 2015 20:18:35
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,sol[12], nr;
char a[12][12];
bool pri[12][12];

void verifica( int subm )
{
    if ( subm < 2 )
        return;
    for ( int i = 1; i <= subm; i++ )
        for ( int j = 1; j <= subm; j++ )
            pri[i][j] = false;

    for ( int i = 1; i <= n; i++ )
        for ( int j = 1; j <= n; j++ )
            if ( a[i][j] == '1' )
                pri[ sol[i] ][ sol[j] ] = true;

    for ( int i = 1; i <= subm; i++ )
        for ( int j = 1; j <= subm; j++ )
            if ( i != j && pri[i][j] == false )
                return;

    nr++;
}

void bkt( int p, int subm )
{
    if ( p == n+1 )
        verifica(subm);
    else
    {
        for ( int i = 1; i <= subm; i++ )
        {
            sol[p] = i;
            bkt(p+1, subm );
        }
        sol[p] = subm+1;
        bkt(p+1,subm+1);

    }
}

int main()
{
    in >> n;
    for ( int i = 1; i <= n; i++ )
        in >> a[i]+1;
    bkt(1, 0);
    out << nr;
    return 0;
}