Cod sursa(job #2542735)

Utilizator KPP17Popescu Paul KPP17 Data 10 februarie 2020 15:49:54
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
using namespace std;



#define fisier "damesah"

#ifdef fisier
    #include <fstream>
    ifstream in(fisier ".in");
    ofstream out(fisier ".out");
#else
    #include <iostream>
    #define in cin
    #define out cout
#endif



const int MAX_N = 13;

int col[MAX_N], lin, n, sol;

bool col_ocup[MAX_N], diag_prin_ocup[MAX_N * 2 - 1], diag_sec_ocup[MAX_N * 2 - 1];



void print() {for (int linie = 0; linie < n; linie++) out << col[linie] + 1 << ' '; out << '\n';}



inline bool ocupat() {

    return
    col_ocup[col[lin]]
    || diag_prin_ocup[lin - col[lin] + n - 1]
    || diag_sec_ocup[lin + col[lin]];

}



inline void set_ocupat(bool val) {

    col_ocup[col[lin]]
    = diag_prin_ocup[lin - col[lin] + n - 1]
    = diag_sec_ocup[lin + col[lin]]
    = val;

}



void backtrack() {

    lin++;

    if (lin == n) {

        if (!sol) {

            print();

        }

        sol++;

    } else {

        for (col[lin] = 0; col[lin] < n; col[lin]++) {

            if (!ocupat()) {

                set_ocupat(true);

                backtrack();

                set_ocupat(false);

            }

        }

    }

    lin--;

}



int main() {

    in >> n;

    lin = -1;

    backtrack();

    out << sol;

}











//