Pagini recente » Cod sursa (job #3360294) | Cod sursa (job #3358746) | Cod sursa (job #3359191) | Cod sursa (job #3360299) | Cod sursa (job #3360048)
#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;
}