Cod sursa(job #1093023)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 27 ianuarie 2014 18:01:18
Problema Problema Damelor Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <cstdio>
using namespace std;
int n, sol, col[15];
bool uzcol[15], uzdiag[2][15];
// col[i] = coloana pe care se afla dama de pe linia i
// uzcol[i] = true daca am plasat deja o dama pe coloana i
// uzdiag[0/1][i] = true daca am plasat o dama pe diagonala NV-SE/NE-SV i

inline void Back(int line)
{
	int i;
	if(line == n + 1)
	{
		sol++;
		if(sol == 1)
		{
			for(i = 1; i <= n; ++i)
				printf("%d ", col[i]);
			printf("\n");
		}
		return;
	}
	for(i = 1; i <= n; ++i)
	{
		if(!uzcol[i] && !uzdiag[0][line + i] && !uzdiag[1][n - i + line])
		{
			col[line] = i;
			uzcol[i] = uzdiag[0][line + i] = uzdiag[1][n - i + line] = true;
			Back(line + 1);
			uzcol[i] = uzdiag[0][line + i] = uzdiag[1][n - i + line] = false;
		}
	}
}

int main()
{
	freopen("damesah.in", "r", stdin);
	freopen("damesah.out", "w", stdout);
	scanf("%d", &n);
	Back(1);
	printf("%d\n", sol);
	return 0;
}