Cod sursa(job #1722403)

Utilizator RRomaniucRomaniuc Radu Andrei RRomaniuc Data 27 iunie 2016 23:49:53
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<stdio.h>
#include<math.h>
FILE *input, *output;
struct REGINA {
	int linie;
	int coloana;
};
int n, cntSol = 0;
bool primaSolAfisata = false;
REGINA stiva[15];
void afiseazaSolutia()
{
	if (primaSolAfisata == true) return;

	primaSolAfisata = true;
	for (int i = 1; i <= n; i++)
		fprintf(output, "%d ", stiva[i].coloana);
}
bool pozitieValida(int coloana, int nivel)
{
	for (int i = 1; i < nivel; i++)
		if (stiva[i].coloana == coloana || abs(stiva[i].linie - nivel) == abs(stiva[i].coloana - coloana))
			return false;

	return true;
}
void BKT(int nivel)
{
	if (nivel == n)
	{
		cntSol++;
		afiseazaSolutia();
		return;
	}

	nivel++;
	for (int coloana = 1; coloana <= n; coloana++)
		if (pozitieValida(coloana, nivel))
		{
			stiva[nivel].linie = nivel;
			stiva[nivel].coloana = coloana;
			BKT(nivel);
		}
}
int main()
{
	input = fopen("damesah.in", "r");
	output = fopen("damesah.out", "w");

	fscanf(input, "%d", &n);
	
	BKT(0);

	fprintf(output, "\n%d\n", cntSol);

	return 0;
}