Cod sursa(job #1994959)

Utilizator MaligMamaliga cu smantana Malig Data 26 iunie 2017 18:14:20
Problema Problema Damelor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>

using namespace std;
ifstream in("damesah.in");
ofstream out("damesah.out");

#define ll long long
#define pb push_back
#define ui unsigned int
const int inf = 1e9 + 5;
const int NMax = 15 + 5;

int N,nrSol;
int queen[NMax];
bool col[NMax],diag1[NMax],diag2[NMax];

void backT(int);

int main() {
    in>>N;

    backT(1);
    out<<nrSol<<'\n';

    in.close();out.close();
    return 0;
}

void backT(int i) {
    if (i == N + 1) {
        if (!nrSol) {
            for (int k=1;k <= N;++k) {
                out<<queen[k]<<' ';
            }
            out<<'\n';
        }

        ++nrSol;
        return;
    }

    for (int j=1;j <= N;++j) {
        if (!col[j] && !diag1[N + i - j] && !diag2[i + j]) {

            col[j] = diag1[N + i - j] = diag2[i + j] = true;
            queen[i] = j;

            backT(i+1);

            col[j] = diag1[N + i - j] = diag2[i + j] = false;
        }
    }
}