Cod sursa(job #2565468)

Utilizator gheorghe_cristiGheorghe Florin Cristi gheorghe_cristi Data 2 martie 2020 14:17:29
Problema Problema Damelor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <numeric>
#include <vector>

using namespace std;

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

int n;
int sol[15];
int a[15][15];

bool verificare() {
    for (int i=1;i<=n;++i)
        a[sol[i]][i] = 1;

    for (int i=1;i<=n;++i) {
        int s = 0;
        for (int j=1;j<=n;++j)
            s+=a[i][j];
        if (s > 1) return false;
    }

    for (int i=1;i<=n;++i) {
        int s = 0;
        for (int j=1;j<=n;++j)
            s+=a[j][i];
        if (s > 1) return false;
    }

    return true;
}

bool check(int pas) {
    for (int i=1;i<pas;++i)
        if (sol[i] == sol[pas]) return false;
    return true;
}

void afisare() {
    if(!verificare()) return;
    for (int i=1;i<=n;++i)
        cout<<sol[i]<<" ";

    cout<<"\n";
}

void backtrack(int pas) {
    if (pas > n)
        afisare();
    else
        for(int i=1;i<=n;++i) {
            sol[pas] = i;
            if (check(pas)) backtrack(pas+1);
        }

}

int main() {
    fin >> n;
    backtrack(1);
}