Cod sursa(job #551562)

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

int nre,i,N,j,ii,X[15],M[15][15],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 <= N ; ++i ){
			for ( j = 1 ; j <= N ; ++j ){
				if ( A[i][j] == '0' )	continue;
				M[ X[i] ][ X[j] ] = 1;
			}
		}
		
		for ( i = 1 ; i <= nre ; ++i ){
			for ( j = 1 ; j <= nre ; ++j )
				if ( i != j && !M[ i ][ j ] )
					return ;
		}
		++Rez;
		return ;
	}
	
	for ( int i = 1 ; i <= nre ; ++i ){
		X[niv] = i;
		bck ( niv + 1 );
	}
	++nre;
	X[niv] = nre;
	bck( niv + 1 );
	--nre;
}

int main () {
	fscanf(f,"%d\n",&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;
}