Cod sursa(job #1951752)

Utilizator antanaAntonia Boca antana Data 3 aprilie 2017 19:38:00
Problema Problema Damelor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

#define MAXN 14

using namespace std;

int st[MAXN], n, answer;
bool firstD[MAXN*2], secondD[MAXN*2], column[MAXN];

void backtracking(int level)
{
    int i;
    if(level == n+1) {
        if(!answer) {
            for(i=1; i<=n; ++i)
                printf("%d ", st[i]);
            printf("\n");
        }
        answer++;
        return;
    }

    int x, y;

    x = level;
    for(y=1; y<=n; ++y)
        if(column[y] == 0 && firstD[x + y - 1] == 0 && secondD[n - x + y] == 0) {
            column[y] = 1;
            firstD[x + y - 1] = 1;
            secondD[n - x +y] = 1;
            st[level] = y;
            backtracking(level+1);
            column[y] = 0;
            firstD[x + y - 1] = 0;
            secondD[n - x +y] = 0;
            st[level] = 0;
        }
}

int main()
{
    freopen("damesah.in", "r", stdin);
    freopen("damesah.out", "w", stdout);

    scanf("%d", &n);
    backtracking(1);

    printf("%d", answer);

    return 0;
}