Cod sursa(job #428256)

Utilizator pykhNeagoe Alexandru pykh Data 29 martie 2010 01:00:49
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
const char in[]="copii.in", out[]="copii.out";
const int N = 1 << 4 ; 
char a[N][N];
int v[N], n, sol;

int ver( int nrg )
	{
		if(nrg < 2 ) return 0;
		int b[ N ][ N ] = {0};
		for( int i = 1 ; i <= n ; ++i )
			for( int j = 1 ; j <= n ; ++j )
				if( a[ i ][ j ] == '1' ) 
					b[ v[ i ] ][ v[ j ] ] = 1;
				
		for( int i = 1 ; i <= nrg ; ++i )
			for( int j = 1 ; j <= nrg; ++j )
				if( i != j && !b[ i ][ j ] ) 
					return 0;
		return 1;
}

void back(int k, int nrg)
	{
		if( k == n + 1 )
			{
				sol += ver( nrg );
				return;
		}
		for( int i = 1 ; i <= nrg ; ++i )
			{
				v[ k ] = i;
				back( k + 1, nrg );
		}
		v[ k ] = nrg + 1;
		back( k + 1, nrg + 1);
}


int main()
	{
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		scanf( "%d", &n );
		for( int i = 1 ; i <= n ; ++i )
			scanf( "%s", a[i] + 1 );
		back( 1, 0 );
		printf( "%d", sol );
		return 0;
}