Cod sursa(job #1930476)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 18 martie 2017 22:29:46
Problema Copii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>

int n, rez;
int c[10][10], sol[100][10], nr[100];

void verif( int m )
{
    int i, j, k, l, ok, flg=0;

    if( m>1 )
    {
        for( i=1;i<=m;i++ )
            for( j=1;j<=m;j++ )
                if( j!=i )
                {
                    ok=0;

                    for( k=1;k<=nr[i];k++ )
                        for( l=1;l<=nr[j];l++ )
                            ok+=c[sol[i][k]][sol[j][l]];

                    if( ok==0 )
                        flg=1;
                }

        if( flg==0 )
            rez++;
    }
}

void bkt( int p, int m )
{
    int i;

    if( p==n+1 )
        verif(m);
    else
    {
        for( i=1;i<=m;i++ )
        {
            nr[i]++;

            sol[i][nr[i]]=p;

            bkt(p+1,m);

            nr[i]--;
        }

        nr[m+1]++;

        sol[m+1][nr[m+1]]=p;

        bkt(p+1,m+1);

        nr[m+1]--;
    }
}

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

    int i,j;

    scanf( "%d", &n );

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

        for( j=1;j<=n;j++ )
        {
            scanf( "%c", &c[i][j] );

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

    bkt(1,0);

    printf( "%d", rez );

    return 0;
}