Cod sursa(job #3142863)

Utilizator AlbertPavPavalache Albert AlbertPav Data 25 iulie 2023 08:55:02
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
const int NMAX=13;

int n,x[NMAX+1],nrSol;
bool C[NMAX+1], /// C[i]=1 <==> avem dama pe coloana i
     dP[2*NMAX],/// dP[i]=1 <==> avem dama pe diag principala
     dS[2*NMAX];/// dS[i]=1 <==> avem dama pe diag secundara

ifstream f("damesah.in");
ofstream g("damesah.out");

void afis()
{
    for(int i=1; i<=n; i++)
        g<<x[i]<<' ';
    g<<'\n';
}

bool valid(int k)
{
    for(int i=1; i<k; i++)
        if(x[i]==x[k]||k-i==abs(x[k]-x[i]))
            return 0;
    return 1;
}


void bt(int k)
{
    if(k<=n)
    {
        for(int i=1; i<=n; i++)
            if(C[i]==0&&dP[n-k+i]==0&&dS[k+i-1]==0)
            {
                x[k]=i;
                C[i]=dP[n-k+i]=dS[k+i-1]=1;
                bt(k+1);
                C[i]=dP[n-k+i]=dS[k+i-1]=0;
            }
    }
    else
    {
        if(nrSol==0)
            afis();
        nrSol++;
    }
}

int main()
{
    f>>n;
    bt(1);
    g<<nrSol;
    f.close();
    g.close();
    return 0;
}