Pagini recente » Cod sursa (job #1767346) | Cod sursa (job #2423661) | Cod sursa (job #2146214) | Cod sursa (job #2050057) | Cod sursa (job #2443474)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
int n;
int pozDame[13];
void Citire() {
fin >> n;
}
void Solutie(int v[13]) {
for (int i = 0; i < n; i++)
fout << v[i] << " ";
fout << "\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);
fout << Solutii;
return 0;
}