Cod sursa(job #668914)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 25 ianuarie 2012 20:32:53
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<cstdio>
#include<cstring>
#define NMAX 15
using namespace std;
int N, D[NMAX], sol;
char G[NMAX][NMAX];
void citire()
{
	freopen("copii.in","r",stdin);
	scanf("%d",&N);
	for(int i = 1; i <= N; ++i)
		gets(G[i]+1);
}
int bun(int nrg)
{
	int viz[NMAX][NMAX];
	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 backtracking(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;
		backtracking(k+1, nrg);
	}

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

int main()
{
	freopen("copii.out","w",stdout);
	citire();
	backtracking(1, 0);
	printf("%d",sol);
	return 0;
}