Cod sursa(job #2815812)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 10 decembrie 2021 14:08:15
Problema Problema Damelor Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>
#include <queue>
#include <algorithm>
using namespace std;

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

int n;
int sol,dameSol[15];
int dame[15];
bool mat[15][15];

bool eValid(int lin,int col)
{
    //verific linia de mai sus daca am dama
    for(int i=lin-1; i>0; i--)
    {
        if(mat[i][col]==true)
        {
            return true;
        }
    }

    //acum verific pe diag sec
    int i=lin-1,j=col-1;
    while(i>0 && j>0)
    {
        if(mat[i][j]==true)
        {
            return true;
        }
        i--;
        j--;
    }

    //verific pe col princ
    i=lin-1,j=col+1;
    while(i>0 && j<=n)
    {
        if(mat[i][j]==true)
        {
            return true;
        }
        i--;
        j++;
    }
    return false;
}

void backtrack(int k)
{
    if(k>n)
    {
        //imi iau solutia
        sol++;
        if(sol==1)
        {
            for(int i=1; i<=n; i++)
            {
                dameSol[i]=dame[i];
            }
        }
        return;
    }
    //incerc sa gasesc o coloana unde sa pun dama
    for(int i=1; i<=n; i++)
    {
        if(!eValid(k,i))
        {
            mat[k][i]=true;
            dame[k]=i;
            backtrack(k+1);
            mat[k][i]=false;
        }
    }
}

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

    for(int i=1; i<=n; i++)
    {
        fout<<dameSol[i]<<" ";
    }
    fout<<"\n"<<sol;
    return 0;
}