Cod sursa(job #2773731)

Utilizator Stefan4814Voicila Stefan Stefan4814 Data 8 septembrie 2021 14:42:07
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define NMAX 31

using namespace std;

ifstream fin("damesah.in");
ofstream fout("damesah.out");

int v[NMAX], diag1[NMAX], diag2[NMAX], line[NMAX];
int n, cnt;
bool ok;

bool valid(int k) {
    return !(line[v[k]] || diag1[v[k] + n - k] || diag2[v[k] + k - 1]);
}

void gen(int k) {
    for(int i = 1; i <= n; i++) {
        v[k] = i;
        if(valid(k)) {
            diag1[n + i - k] = 1;
            diag2[k + i - 1] = 1;
            line[i] = 1;
            if(k < n)
                gen(k + 1);
            else {
                if(!ok) {
                    ok = 1;
                    for(int j = 1; j <= n; j++)
                        fout << v[j] << ' ';
                    fout << '\n';
                }
                cnt++;
            }
            diag1[n + i - k] = 0;
            diag2[i + k - 1] = 0;
            line[i] = 0;
        }
    }
}

int main() {
    fin >> n;
    gen(1);
    fout << cnt;
}