Cod sursa(job #3360048)

Utilizator robert.stefanRobert Stefan robert.stefan Data 8 iulie 2026 13:37:10
Problema Problema Damelor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>

using namespace std;

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

int n;

int sol[13];

bool primaSolGasita;

bool solutieValida(int nivel) {
	for(int i = 0; i < nivel; i++) {
		if(sol[i] == sol[nivel]) {
			return false; // aceeasi coloana
		}

		if(nivel - i == sol[nivel] - sol[i]) {
			return false; // aceeasi diagonala principala
		}

		int linDif = nivel - i;
		int colDif = sol[nivel] - sol[i];
		if(colDif < 0) {
			colDif *= -1;
		}

		if(linDif == colDif) {
			return false; // aceeasi diagonala secundara
		}
	}

	return true;
}

int asezareRegine(int nivel) {
	if(nivel == n) {
		if(primaSolGasita == false) {
			for(int i = 0; i < n; i++) {
				fout << sol[i] << " ";
			}

			fout << "\n";

			primaSolGasita = true;
		}

		return 1;
	}

	int nrSolutii = 0;

	for(int i = 1; i <= n; i++) {
		sol[nivel] = i;

		if(solutieValida(nivel)) {
			nrSolutii += asezareRegine(nivel + 1);
		}
	}

	return nrSolutii;
}

int main() {
	fin >> n;

	fout << asezareRegine(0) << "\n";

	fin.close();
	fout.close();

	return 0;
}