Cod sursa(job #464111)

Utilizator GotenAmza Catalin Goten Data 18 iunie 2010 20:31:54
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<iostream>
using namespace std;
char a[20][20];
int n,res,nr,l[20],m[20][20],ok[20],team[20];
void generate(int niv)
{
	int i,j,k;
	if(niv==n+1&&nr>1)
	{
		for(j=0;j<=19;++j)
				ok[j]=0;
		for(i=1;i<=nr;++i)
		{
			for(j=1;j<=l[i];++j)
				for(k=1;k<=n;++k)
					if(a[m[i][j]][k]=='1')
						ok[team[k]]=i;
			for(j=1;j<=nr;++j)
				if(ok[j]!=i&&j!=i)
					return;
		}
		++res;
		return;
	}
	if(niv==n+1)
		return;
	for(i=1;i<=nr;++i)
	{
		m[i][++l[i]]=niv;
		team[niv]=i;
		generate(niv+1);
		--l[i];	
	}
	++nr;
	m[nr][++l[nr]]=niv;
	team[niv]=nr;
	generate(niv+1);
	--l[nr];
	--nr;
}
int main()
{
	int i,j;
	ifstream read ("copii.in");
	ofstream write ("copii.out");
	read>>n;
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
			read>>a[i][j];
	generate(1);
	write<<res<<'\n';
	return 0;
}