Cod sursa(job #1935080)

Utilizator sergiudnyTritean Sergiu sergiudny Data 21 martie 2017 23:42:02
Problema Problema Damelor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
///linia - i, coloana v[i], diagonala
int v[20],n,cont;
bitset<20>used,lin,col,d1,d2;
bool ok;

void afis(){
    for(int i=1;i<=n;++i)
        fout<<v[i]<<" ";
    fout<<'\n';
}
void bk(int step){
    if(step==n+1){
        bool aux=1;
        for(int i=1;i<=n && aux;++i){
            if(lin[i] || col[v[i]] || d1[i+v[i]-1] || d2[v[i]-i+1])
                aux=0;
            lin[i]=col[v[i]]=d1[i+v[i]-1]=d2[v[i]-i+1]=1;
        }
        if(aux && !ok){
            ok=1;
            afis();
            cont=1;
        }
        else if(aux && ok) cont++;
        else if(!aux) lin.reset(),col.reset(),d1.reset(),d2.reset();
    }
    for(int i=1;i<=n;++i){
        if(!used[i]){
            v[step]=i;
            used[i]=1;
            bk(step+1);
            used[i]=0;
        }
    }
}

int main()
{
    fin>>n;
    bk(1);
    fout<<cont;
    return 0;
}