Cod sursa(job #1995263)

Utilizator HD650Stoicescu Adrian Nicolae HD650 Data 27 iunie 2017 14:15:41
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream f("damesah.in");
ofstream g("damesah.out");
int n, x[100], nrsol = 0;
bool afisa;

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

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

void backt(int k)
{
    for(int v = 1; v <= n; v++)
    {
        x[k] = v;
        if(valid(x, k))
        {
            if(k == n)
            {
                afis(x, n);
                v = n; //fortare "revenire"
            }
            else
                backt(k + 1);
        }
    }
}

int main()
{
    f >> n;
    backt(1);
    g << nrsol;
    return 0;
}