Cod sursa(job #487601)

Utilizator indestructiblecont de teste indestructible Data 25 septembrie 2010 18:42:12
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define NMAX 12
char A[NMAX][NMAX],marc[NMAX][NMAX];
int n,sols,part[NMAX];
void read()
{
	scanf("%d\n",&n);
	int i;
	for (i=1; i<=n; i++)
		fgets(A[i]+1,NMAX,stdin);
}
inline int verif(int p)
{
	int i,j;
	for (i=1; i<=p; i++)
		for (j=1; j<=p; j++)
			marc[i][j]=0;
	for (i=1; i<=n; i++)
		for (j=1; j<=n; j++)
			if (A[i][j]=='1')
				marc[part[i]][part[j]]=1;
	for (i=1; i<=p; i++)
		for (j=1; j<=p; j++)
			if (i!=j && !marc[i][j])
				return 0;
	return 1;
}
void bkt(int k,int p)
{
	if (k==n+1)
	{
		if (verif(p))
			sols++;
		return ;
	}
	int i;
	for (i=1; i<=p; i++)
	{
		part[k]=i;
		bkt(k+1,p);
	}
	part[k]=p+1;
	bkt(k+1,p+1);
}
int main()
{
	freopen("copii.in","r",stdin);
	freopen("copii.out","w",stdout);
	read();
	bkt(1,0);
	printf("%d\n",sols-1);
	return 0;
}