Cod sursa(job #442519)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 14 aprilie 2010 18:44:35
Problema Copii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <string.h>
#define Nmax 13

int a[Nmax][Nmax],leg[Nmax][Nmax];
int mul[Nmax];
int n,sol,nrm;

char s[Nmax];

void check(){
	int i, j, ok=0;
	if(nrm <=1 ) return;
	memset(leg,0,sizeof(leg));
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
			if(a[i][j]) 
				if(!leg[mul[i]][mul[j]]){
					ok++;
					leg[mul[i]][mul[j]]=1;
				}
	if(ok >= nrm*(nrm-1) ) 
		sol++;
}

void back(int k){
	int j;
	if(k>n) check();
	else{
	for(j=1; j<=nrm; ++j){
		mul[k]=j;
		back(k+1);
	}
	mul[k]=++nrm;
	back(k+1);
	--nrm;
	}
}

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