Cod sursa(job #2322940)

Utilizator calin9819Costea Calin calin9819 Data 18 ianuarie 2019 16:59:52
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;

ifstream f("damesah.in");
ofstream g("damesah.out");

int n, v[15], sol, diag1[30], diag2[30], col[30];
void afisare() {
    for (int i = 1; i <= n; i++)
        g << v[i] << ' ';
    g << '\n';
}

int valid(int k) {
    int i;
    for (i = 1; i <= k - 1; i++)
        if ((v[i] == v[k]) || (abs(v[k] - v[i]) == (k - i)))
            return 0;
    return 1;
}

int valid2(int c, int k) {
    if(!col[c] && !diag1[c - k + n - 1] && !diag2[c + k])
        return 1;
    return 0;
}

int solutie(int k) {
    if (k == n)
        return 1;
    return 0;
}

void BK(int k) {
    if(k == n + 1) {
        sol++;
        if(sol == 1) {
            afisare();
        }
    } else {
        for(int i = 1; i <= n; i++ ) {
            if(valid2(i, k)) {
                v[k] = i;
                col[i] = diag1[i - k + n - 1] = diag2[i + k] = true;
                BK(k + 1);
                col[i] = diag1[i - k + n - 1] = diag2[i + k] = false;
            }

        }
    }
}

int main() {
    f >> n;
    BK(1);
    g << sol;
    return 0;
}