Cod sursa(job #427538)

Utilizator kyrkDragos Dumitrescu kyrk Data 27 martie 2010 23:08:31
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

using namespace std;

const int MAX_N = 15;

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

int N, D[MAX_N], Sol;
char G[MAX_N][MAX_N];

void citire()
{
	fin >> N;

	for(int i = 1; i <= N; ++i)
		fin >> G[i]+1;
}

int bun(int nrg)
{
	int viz[MAX_N][MAX_N];
	memset(viz, 0, sizeof viz);

	for(int i = 1; i <= N; ++i)
		for(int j = 1; j <= N; ++j)
			if(G[i][j] == '1')
				viz[D[i]][D[j]] = 1;

	for(int i = 1; i <= nrg; ++i)
		for(int j = 1; j <= nrg; ++j)
			if(i != j && viz[i][j] == 0)
				return 0;

	return 1;
}

void back(int k, int nrg)
{
	if(k == N+1)
	{
		if(nrg > 1)
			Sol += bun(nrg);
		return;
	}

	for(int i = 1; i <= nrg; ++i)
	{
		D[k] = i;
		back(k+1, nrg);
	}

	D[k] = nrg + 1;
	back(k+1, nrg+1);
}

int main()
{
	citire();
	back(1, 0);
	fout << Sol;
}