Cod sursa(job #1876587)

Utilizator medicinedoctoralexandru medicinedoctor Data 12 februarie 2017 14:45:14
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <vector>
#include <cmath>

using namespace std;

ifstream cin ("damesah.in");
ofstream cout("damesah.out");

vector <int> a;
vector <bool> q;
int n,x=0;
bool b=true;

bool diag(int x, int y)
{
    for (int i=0; i<x; i++)
        if (abs(x-i)==abs(y-a[i])) return false;
    return true;
}

void bk(int k)
{
    if (k==n)
    {
        if (b)
        {
            for (int i=0; i<n; cout << a[i]+1 << ' ',i++);
            cout << '\n';
            b=false;
        }
        x++;
        return;
    }
    for (int i=0; i<n; i++)
        if ((!q[i]) && diag(k,i)) q[i]=true,a[k]=i,bk(k+1),q[i]=false,a[k]=-1;
}

main()
{
    cin >> n;
    a.resize(n);
    q.resize(n);
    for (int i=0; i<n; i++) a[i]=-1,q[i]=false;
    bk(0);
    cout << x;
}