Pagini recente » Cod sursa (job #1315029) | Cod sursa (job #1295814) | Cod sursa (job #3334568) | Cod sursa (job #300455) | Cod sursa (job #3328970)
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
const int nMax = 15;
int n, sol;
int dame[nMax];
bool notAfisat = true;
bitset<nMax> vis;
void Backtracking(int pos) {
if (pos > n) {
// afișăm prima soluție
if (notAfisat) {
for (int i = 1; i <= n; i++)
fout << dame[i] << ' ';
fout << '\n';
notAfisat = false;
}
sol++;
return;
}
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
bool valid = true;
// verificăm diagonalele
for (int j = 1; j < pos; j++) {
if (std::abs(j - pos) == std::abs(dame[j] - i)) {
valid = false;
break;
}
}
if (valid) {
dame[pos] = i;
vis[i] = 1;
Backtracking(pos + 1);
vis[i] = 0; // revenim pentru backtracking
}
}
}
}
int main() {
fin >> n;
Backtracking(1);
fout << sol;
return 0;
}