Cod sursa(job #1213220)

Utilizator mariusn01Marius Nicoli mariusn01 Data 27 iulie 2014 16:03:43
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <bitset>
#define DIM 40

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

int x[DIM], y[DIM];
bitset<2*DIM> C, P, S;

int n, sol;

void back(int k) {
    if (k>n) {
        sol++;
        if (sol == 1) {
            for (int i=1;i<=n;i++)
                fout<<x[i]<<" ";
        }
        return;
    }

    for (int i=1;i<=n;i++) {
        x[k] = i;
        if (!C[i] && !P[(i<=k) ? (k-i) : (n+(i-k))]
            && !S[(k+i<=n+1) ? (n+1-(k+i)) : (n+1 + (k+i))]) {
            C[i] = 1;
            P[(i<=k) ? (k-i) : (n+(i-k))] = 1;
            S[(k+i<=n+1) ? (n+1-(k+i)) : (n+1 + (k+i))] = 1;
            back(k+1);
            C[i] = 0;
            P[(i<=k) ? (k-i) : (n+(i-k))] = 0;
            S[(k+i<=n+1) ? (n+1-(k+i)) : (n+1 + (k+i))] = 0;


        }
    }

}

int main() {
    fin>>n;

    back(1);
    fout<<"\n"<<sol;
    return 0;
}