Cod sursa(job #428949)

Utilizator veliki.velicuVelicu Stefan veliki.velicu Data 29 martie 2010 18:33:27
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
using namespace std;

ifstream in("copii.in");
ofstream out("copii.out");

bool copii[11][11], grupe[11][11];
int sol[11], n, p, nr;

void prelucrare(int maxx)
{
	int i, j;
	if(maxx==1)
		return;
	for(i=1; i<=maxx; ++i)
		for(j=1; j<=maxx; ++j)
			grupe[i][j] = false;
	for(i=1; i<=n; ++i)
		for(j=1; j<=n; ++j)
			if(copii[i][j] && sol[i]!=sol[j])
				grupe[sol[i]][sol[j]] = true;
	for(i=1; i<=maxx; ++i)
		for(j=1; j<=maxx; ++j)
			if(i!=j && !grupe[i][j])
				return;
	++nr;
}	

void back(int p, int maxx)
{
	if(p == 1+n)
	{
		prelucrare(maxx);
		return;
	}
	for(int i=1; i<= maxx; i++)
	{
		sol[p] = i;
		back(p+1, maxx);
	}
	sol[p] = maxx+1;
	back(p+1, maxx+1);
}		

int main()
{
	char s[16];
	in>>n>>ws;
	for(int i=1; i<=n; i++)
	{
		in.getline(s+1,16);
		for(int j=1; j<=n; j++)
			if(s[j]=='1')
				copii[i][j]=true;
	}
	back(1, 0);
	out<<nr;
	return 0;
}