Cod sursa(job #442511)

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

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

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){
	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(){
	freopen("copii.in","r",stdin);
	freopen("copii.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j) scanf("%d",&a[i][j]);
	
	back(1);
		
	printf("%d\n",sol);
	fclose(stdin); fclose(stdout);
	return 0;
}