Pagini recente » Cod sursa (job #1457283) | Cod sursa (job #195084) | Cod sursa (job #1094127) | Cod sursa (job #2662066) | Cod sursa (job #2443027)
#include <iostream>
using namespace std;
int n;
int pozDame[13];
void Citire() {
cin >> n;
}
void Solutie(int v[13]) {
for (int i = 0; i < n; i++)
cout << v[i] << " ";
cout << "\n";
}
int lin[13];
int col[13];
int diagSecundara[26];
int diagPrincipala[26];
bool isOK(int linie, int coloana) { // verifica daca pot pune dama in locul i,j;
if (lin[linie] == 1) {
return false;
}
if (col[coloana] == 1) {
return false;
}
if (diagSecundara[linie+coloana] == 1) {
return false;
}
if (diagPrincipala[coloana-linie+n] == 1) {
return false;
}
return true;
}
void nuPuneAici(int linie, int coloana) { // marcheaza locurile in care nu mai pot pune dame
lin[linie] = 1;
col[coloana] = 1;
diagSecundara[linie+coloana] = 1;
diagPrincipala[coloana-linie+n] = 1;
}
void potiPuneAici(int linie, int coloana) {
lin[linie] = 0;
col[coloana] = 0;
diagSecundara[linie+coloana] = 0;
diagPrincipala[coloana-linie+n] = 0;
}
int damePlasate = 0;
int Solutii = 0;
void Rezolvare(int linie) {
if (damePlasate == n) {
Solutii++;
if (Solutii == 1)
Solutie(pozDame);
return;
}
for (int j = 0; j < n; j++) { // j = coloana
if (isOK(linie, j)) {
pozDame[linie] = j+1;
nuPuneAici(linie, j);
damePlasate++;
Rezolvare(linie+1);
pozDame[linie] = 0;
potiPuneAici(linie, j);
damePlasate--;
}
}
}
int main()
{
Citire();
Rezolvare(0);
cout << Solutii;
return 0;
}