Cod sursa(job #422467)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 22 martie 2010 18:50:29
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#include <cstring>

#define file_in "copii.in"
#define file_out "copii.out"

int n,sol;
char s[20][20];
int p[20];

void citire()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d\n", &n);
	for (int i=1;i<=n;++i)
		 gets(s[i]+1);
	
}

int verif(int nr)
{
	int q[20][20];
	int i,j;
	memset(q,0,sizeof(q));
	for (i=1;i<=n;++i)
		 for (j=1;j<=n;++j) 
			  if (s[i][j]=='1')
			       q[p[i]][p[j]]=1;
	for (i=1;i<=nr;++i)
         for (j=1;j<=nr;++j)
              if (i!=j && q[i][j]==0)
				  return 0;
	return 1;
}	

void back(int k, int nr)
{
	int i;
	if (k==n+1)
	{
		if (nr>1)
			sol+=verif(nr);
		return ;
	}
	for (i=1;i<=nr;++i)
	{
		p[k]=i;
		back(k+1,nr);
	}
	p[k]=nr+1;
	back(k+1,nr+1);
}


void solve()
{
	back(1,0);
	
	printf("%d\n", sol);
}


int main()
{
	citire();
	solve();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}