Cod sursa(job #3130208)

Utilizator Andrei_MarinescuMarinescu Andrei Andrei_Marinescu Data 17 mai 2023 01:13:48
Problema Problema Damelor Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
int n,st[12],sol;

void afis()
{
    sol++;
    if(sol==1)
    {
        int i;
        for(i=1;i<=n;i++)
            fout<<st[i]<<" ";
        fout<<'\n';
    }
}

bool solutie(int p)
{
    if(p==n)
        return 1;
    return 0;
}

int modul(int x)
{
    if(x<0)
        return 0-x;
    return x;
}

bool valid(int p)
{
    int i,ok=1;
    for(i=1;i<=p-1;i++)
    if(st[p]==st[i])
    {
        ok=0;
        break;
    }
    for(i=1;i<=p-1;i++)
    if(modul(i-p)==modul(st[i]-st[p]))//i si p se ataca pe diagonala
    {
        ok=0;
        break;
    }
    return ok;
}

void bk(int p)
{
    int i;
    for(i=1;i<=n;i++)
    {
        st[p]=i;
        if(valid(p))
        {
            if(solutie(p))
                afis();
            else
                bk(p+1);
        }
    }
}

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