Cod sursa(job #3328970)

Utilizator _.diannaq._Bengescu Diana _.diannaq._ Data 11 decembrie 2025 13:58:45
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#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;
}