Cod sursa(job #1374390)

Utilizator DanielRusuDaniel Rusu DanielRusu Data 5 martie 2015 08:50:33
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <cmath>

using namespace std;

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

int N, sol[15], freq[15], k, rez, diag_principala[100], diag_secundara[100];

int modul(int x) {
    return max(x, -x);
}

void afis() {
    for(int i = 1; i <= N; ++i) {
        fout << sol[i] << ' ';
    }
}

void bkt(int pos) {
    if(pos == N + 1) {
        if(k == 0) afis();
        k = 1;
        rez++;
    }
    else {
        for(int i = 1; i <= N; ++i) {
            if(freq[i] == 0 && diag_principala[i - pos + 1] == 0 && diag_secundara[i + pos - 1] == 0) {// && i - pos + 1 > 0 && i + pos - 1 <= N) {
                freq[i] = 1;
                sol[pos] = i;
                diag_principala[i - pos + 1] = 1;
                diag_secundara[i + pos - 1] = 1;
                bkt(pos + 1);
                freq[i] = sol[pos] = diag_principala[i - pos + 1] = diag_secundara[i + pos - 1] = 0;
            }
        }
    }
}

int main() {
    fin >> N;

    bkt(1);

    fout << '\n' << rez << '\n';

    fin.close();
    fout.close();

    return 0;
}