Cod sursa(job #428823)

Utilizator lalasCont de teste lalas Data 29 martie 2010 16:31:45
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 11;
int i , j , n ;
char s[maxn];
bool A[maxn][maxn] ;
int sr[maxn];
int sol;

bool ok (int nr)
{
	bool clean[maxn];
	int i , j , k;
	for( i = 1 ; i <= nr ; ++i ) {
		memset( clean , 0 , sizeof(clean));
		for ( j = 1 ; j <= n ; ++j )
			if ( sr[j] == i ) {
				for( k = 1 ; k <= n ; ++k )
					if ( A[j][k] == 1 ) clean[sr[k]] = 1;
			}
		for( j = 1 ; j <= nr ; ++j )
			if ( clean[j] == 0 && i != j ) return false;
	}
return true;
}
void back(int p , int nr) {
	
	if ( p == n + 1 ) {
		sol += ok(nr);
		return ;
	}
	int i;
	
	for( i = 1 ; i <= nr ; ++i )
		sr[p] = i , back ( p + 1 , nr );
	
	back ( p + 1 , nr + 1 );
}

int main()
{
	freopen("copii.in","r",stdin);
	freopen("copii.out","w",stdout);
	scanf("%d\n",&n);
	for( i = 1 ; i <= n ; ++i ) {
		fgets ( s , maxn , stdin);
		for( j = 0 ; s[j] == '1' || s[j] == '0' ; ++j )
			A[i][j + 1] = s[j] - '0';
	}
	back ( 1 , 2 );
	printf("%d\n",sol / 2);
return 0;
}