Cod sursa(job #1935087)

Utilizator sergiudnyTritean Sergiu sergiudny Data 21 martie 2017 23:46:25
Problema Problema Damelor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 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<75>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]+25] || d2[v[i]-i+27])
                aux=0;
            lin[i]=col[v[i]]=d1[i+v[i]+25]=d2[v[i]-i+27]=1;
        }
        lin.reset(),col.reset(),d1.reset(),d2.reset();
        if(!aux)
            return;
        if(aux && !ok){
            ok=1;
            afis();
            cont=1;
        }
        else if(aux && ok) cont++;
    }
    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;
}