Cod sursa(job #1930462)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 18 martie 2017 22:07:15
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 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, l, j, k;

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

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

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

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

    return 1;
}

void bkt( int p=0 )
{
    if( p==n )
        rez+=check();
    else
    {
        int i;

        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++ )
        for( j=0;j<n;j++ )
        {
            scanf( "%c", &c );
            f[i][j]=c -'0';
        }

    bkt();

    printf( "%d", rez );

    return 0;
}