Pagini recente » Cod sursa (job #2140340) | Monitorul de evaluare | Cod sursa (job #1152389) | Cod sursa (job #2171844) | Cod sursa (job #1279931)
#include <fstream>
#include <cmath>
using namespace std;
int n, a[14], ns;
bool prima = true;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
void init (int k) {
a[k] = 0; // Punem langa tabla (in stanga) piesa de pe linia k.
}
bool succesor (int k) {
a[k]++; // Deplasam piesa cu o coloana mai in dreapta.
return a[k] <= n; // Piesa ramane pe tabla?
}
bool valid (int k) {
bool ok = true; // Presupunem ca piesele nu se ataca.
int i;
for (i = 1; i <= k - 1; i++) // Pentru fiecare piesa pusa deja
if ((a[i] == a[k]) or (abs(a[k] - a[i]) == k - i)) // Avem atac pe coloane sau diagonale?
ok = false; // Nu ne convine pozitia piesei din linia k.
return ok;
}
bool sol (int k) {
return k == n; // Am pus piese pe toate liniile?
}
void tip () {
int i;
for (i = 1; i <= n; i++)
fout << a[i] << ' ';
fout << '\n';
prima = false;
}
void bt (int k) {
init (k); // initializare
while (succesor(k)) // cat timp avem un succesor
if (valid(k)) // Sunt indeplinite conditiile?
if (sol(k)) { // Avem o solutie completa?
ns++;
if (prima)
tip(); // Prezentam solutia.
}
else // Nu?
bt(k + 1); // Trecem la nivelul urmator.
}
int main () {
fin >> n;
bt(1);
fout << ns;
}