Cod sursa(job #2672353)

Utilizator AndreiAlexandru2k3Ciucan Andrei Alexandru AndreiAlexandru2k3 Data 13 noiembrie 2020 18:55:43
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <cstdlib>
using namespace std;

FILE *f=fopen("damesah.in","r");
FILE *g=fopen("damesah.out","w");

int n, x[14],nr_sol;
bool Ap[14], diagonala_stanga[28], diagonala_dreapta[28];

bool valid(int k, int poz)
{
    return !Ap[poz] && !diagonala_dreapta[n - k + poz] && !diagonala_stanga[k + poz - 1];
}

void afis(int k)
{
    for(int i = 1; i <= k; i++)
        fprintf(g,"%d ",x[i]);
    fprintf(g,"\n");
}

void backt(int k)
{
    if(k <= n)
    {
        for(int i = 1; i <= n; i++)
            if(valid(k, i))
            {
                x[k]=i;
                Ap[i]=diagonala_dreapta[n - k + i]=diagonala_stanga[k + i - 1]=1;
                backt(k+1);
                Ap[i]=diagonala_dreapta[n - k + i]=diagonala_stanga[k + i - 1]=0;
            }
    }
    else
    {
        if(!nr_sol)
            afis(n);
        nr_sol++;
    }
}

int main()
{
    fscanf(f,"%d",&n);
    backt(1);
    fprintf(g,"%d",nr_sol);
    return 0;
}