Cod sursa(job #551401)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 10 martie 2011 19:00:29
Problema Copii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
#include<string>
FILE*f=fopen("copii.in","r");
FILE*g=fopen("copii.out","w");

int E[15][15],nre,i,N,j,ii,X[15],M[15][15],ok,Rez;
char A[15][15];

void bck ( int niv ){
	if ( niv == N + 1 ){
		if ( nre <= 1 ) return ;
		memset(M,0,sizeof(M));
		
		for ( i = 1 ; i <= nre ; ++i ){
			for ( j = 1 ; j <= E[i][0] ; ++j ){
				
				for ( ii = 1 ; ii <= N ; ++ii ){
					if ( A[ E[i][j] ][ ii ] == '1' )
						M[ i ] [X [ii] ] = 1;
				}
			}
		}
		ok = 0;
		for ( i = 1 ; i <= nre ; ++i ){
			for  ( j = 1 ; j <= nre ; ++j )
				if ( i != j && M[i][j] == 0 )
					ok = 1;
		}
		if ( !ok )
			++Rez;
		
		return ;
	}
	
	for ( int i = 1 ; i <= nre ; ++i ){
		E[i][++E[i][0]] = niv;
		X[niv] = i;
		bck ( niv + 1 );
		--E[i][0];
	}
	++nre;
	E[nre][++E[nre][0]] = niv;
	X[niv] = nre;
	bck( niv + 1 );
	--nre;
}

int main () {
	fscanf(f,"%d",&N);
	for ( i = 1 ; i <= N ; ++i ){
		fscanf(f,"%s",A[i]+1);
	}
	
	bck(1);
	
	fprintf(g,"%d\n",Rez);
	
	fclose(f);
	fclose(g);
	
	return 0;
}