Cod sursa(job #1889144)

Utilizator Luncasu_VictorVictor Luncasu Luncasu_Victor Data 22 februarie 2017 16:40:04
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>
#include <cassert>
using namespace std;

vector<int> sol;
vector<int> aux;
bool col[50], dg1[50], dg2[50];
int n, cnt;

void bk(int k) {
    if (k > n) {
        if (sol.size() == 0) {
            sol = aux;
        }
        cnt++;
        return;
    }
    for (int i = 1; i <= n; ++i) {
        if (!col[i] && !dg1[i+k] && !dg2[20+i-k]) {
            col[i] = dg1[i+k] = dg2[20+i-k] = true;
            aux[k-1] = i;
            bk(k+1);
            col[i] = dg1[i+k] = dg2[20+i-k] = false;
        }
    }
}

int main() {
    freopen("damesah.in","r",stdin);
    freopen("damesah.out","w",stdout);
    cin >> n;
    aux.resize(n);
    bk(1);
    for (int i = 0; i < sol.size(); ++i) {
        cout << sol[i] << " ";
    }
    cout << endl << cnt << endl;
    return 0;
}