Cod sursa(job #1511478)

Utilizator cristinamateiCristina Matei cristinamatei Data 26 octombrie 2015 20:04:11
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 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 <= n; i++ )
    {
        for ( int j = 1; j <= n; j++ )
        {
            if ( i == j )
                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 ( pri[i][j] == false && i != j )
                return;
        }
    }
    nr++;
    for ( int i = 1; i <= n; i++ )
        for ( int j = 1; j <= n; j++ )
            pri[i][j] = false;
}

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

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