Cod sursa(job #2815924)

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

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

int n;
long long int sol;
int dameSol[15];
int dame[15];
bool mat[15][15],amLin[15],amDiagPrinc[30],amDiagSec[30];


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++)
    {
        int lin=k,col=i;
        if(!amDiagPrinc[lin+n-col] && !amDiagSec[lin+col-1] && !amLin[i])
        {
            mat[k][i]=true;
            dame[k]=i;
            amLin[i]=true;
            amDiagPrinc[lin+n-col]=true;
            amDiagSec[lin+col-1]=true;

            backtrack(k+1);

            mat[k][i]=false;
            amLin[i]=false;
            amDiagPrinc[lin+n-col]=false;
            amDiagSec[lin+col-1]=false;
        }
    }
}

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

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