Cod sursa(job #421905)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 21 martie 2010 20:32:47
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<stdio.h>
int n,sol,st[12];
char s[12][12];

int exista(int nrg)
{
	int i,j,ok[12][12]={0};
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			ok[st[i]][st[j]]|=(s[i][j]=='1');
	for(i=1;i<=nrg;i++)
		for(j=1;j<=nrg;j++)
			if(i!=j && !ok[i][j])
				return 0;
	return 1;
}

void back(int k, int nrg)
{
	if(k==n+1)
	{
		if(nrg!=1)
			sol+=exista(nrg);
		return;
	}
	int i;
	for(i=1;i<=nrg;i++)
	{
		st[k]=i;
		back(k+1,nrg);
	}
	st[k]=nrg+1;
	back(k+1,nrg+1);
}

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