Cod sursa(job #2721738)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 12 martie 2021 10:36:10
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

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

int sol = 0,flag=0;
int v[40];
int diagonala1[40];
int diagonala2[40];
int h[40];
int n;

bool ok(int k){
    if(h[v[k]] == 1){
        return 0;
    }
    if(diagonala1[v[k]+k-1] == 1){
        return 0;
    }
    if(diagonala2[n-k+v[k]] == 1){
        return 0;
    }
    return 1;
}

void backtr(int k){
    int i;
    for(i = 1; i <= n; i++){
        v[k] = i;
        if(ok(k)){
            h[i] = 1;
            diagonala1[v[k]+k-1] = 1;
            diagonala2[n-k+v[k]] = 1;
            if(k == n){
                if(flag==0){
                    flag = 1;
                    for(int j = 1; j <= n; j++){
                        fout<<v[j]<<' ';
                    }
                    fout<<'\n';
                }
                sol++;
            }else{
                backtr(k+1);
            }
            h[i] = 0;
            diagonala1[v[k]+k-1] = 0;
            diagonala2[n-k+v[k]] = 0;
        }
    }
}


int main()
{
    fin>>n;
    backtr(1);
    fout<<sol<<'\n';
    return 0;
}