Cod sursa(job #424744)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 25 martie 2010 10:05:55
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#include<bitset>

using namespace std;

int i,j,n,m,gr,grup[20],rez;
char a[20][20];

bitset<20> pgr[20];

int verifica(int gr)
{
	for(int i=1;i<=gr;++i)
		for(int j=1;j<=gr;++j) pgr[i][j]=0;
	
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			if(a[i][j])
				pgr[ grup[i] ][ grup[j]] =1;
			
	for(int i=1;i<=gr;++i)
		for(int j=1;j<=gr;++j)
			if(i!=j&&!pgr[i][j]) return 0;
		
	return 1;
}

void back(int i,int gr)
{
	if(i>n)
	{
		if(gr>=2&&verifica(gr)) rez++;
		return ;
	}
	
	for(int j=1;j<=gr;++j)
	{
		grup[i]=j;
		back(i+1,gr);
	}
	
	grup[i]=gr+1;
	back(i+1,gr+1);
}

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