Cod sursa(job #552375)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 12 martie 2011 10:28:29
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
using namespace std;

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

int N, V[12], X[12], A[12][12], M[12][12], C = -1;

int verif (int niv)
{
	int i, j;
	for (i = 1; i <= niv; i++)
		for (j = 1; j <= niv; j++)
			M[i][j] = 0;
	for (i = 1; i <= N; i++)
		for (j = 1; j <= N; j++)
			if ( A[i][j] )
				M[ X[i] ][ X[j] ] = 1;
	for (i = 1; i <= niv; i++)
		for (j = 1; j <= niv; j++)
			if (i != j && !M[i][j])
				return 0;
	return 1;
}

void part (int k, int niv)
{
	if (k == N + 1)
	{
		if ( verif (niv) ) C++;
		/*		
		int i, j;
		for (i = 1; i <= niv; i++)
		{
			fo << '{';
			for (j = 1; j <= N; j++)
				if (X[j] == i)
					fo << ' ' << j;
			fo << " } ";
		}
		fo << '\n';
		*/
		return;
	}
	for (int i = 1; i <= niv + 1; i++)
	{
		X[k] = i;
		part (k + 1, niv>i?niv:i);
	}
}

int main ()
{
	int i, j;
	char c;
	
	fi >> N;
	for (i = 1; i <= N; i++)
	{
		for (j = 1; j <= N; j++)
		{
			fi >> c;
			A[i][j] = c - '0';			
		}
	}
	
	part (1, 0);
	
	fo << C;
	return 0;
}