Cod sursa(job #1930456)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 18 martie 2017 21:52:40
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <vector>

using namespace std;

typedef vector<int> mult;
vector<mult> t;

int n, rez, v[10];
bool f[10][10];

bool check( void )
{
    int i, x, l;

    if( t.size()==1 )
        return 0;

    for( i=0;i<t.size();i++ )
    {
        x=(1<<i);

        for( int j:t[i] )
        {
            for( l=0;l<n;l++ )
                if( f[j][l] )
                    x|=(1<<v[l]);
        }

        if( x!=(1<<t.size())-1 )
            return 0;
    }

    return 1;
}

void bkt( int p )
{
    int i;

    p=0;

    if( p==n )
        rez+=check();
    else
    {
        for( i=0;i<t.size();i++ )
        {
            v[p]=i;

            t[i].push_back(p);

            bkt(p+1);

            t[i].pop_back();
        }

        v[p]=t.size();

        t.push_back(vector<int>(1,p));

        bkt(p+1);

        t.pop_back();
    }
}


int main()
{
    freopen( "copii.in", "r", stdin );
    freopen( "copii.out", "w", stdout );

    int i, j;
    char c;

    scanf( "%d", n );

    for( i=0;i<n;i++ )
    {
        scanf( "\n" );

        for( j=0;j<n;j++ )
        {
            scanf( "%c", &c );

            f[i][j]=c-'0';
        }
    }

    bkt();

    printf( "%d", rez );

    return 0;
}