Cod sursa(job #2296724)

Utilizator slym777Darii Dan slym777 Data 4 decembrie 2018 23:09:01
Problema Problema Damelor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <bits/stdc++.h>
#define Nmax 14
using namespace std;

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

int dame[Nmax+1];
int n,nr = 0;
bool prima_sol = false;

void print()
{
    for (int i = 1; i <= n; i++)
        fout << dame[i];
    fout << "\n";
}

bool verify(int i, int k)
{
    //cout << "acii";
    for (int j = 1; j < k; j++)   /// verific pe coloana
        if (dame[j] == i)
            return false;

    int x = k - 1;
    for (int j = i-1; j > 0 && x > 0; j--,x--)    /// verific daca pe diagonala st-sus nu exista nici o dama
        if(dame[x] == j)
            return false;
    x = k - 1;
    for (int j = i+1; j <= n && x > 0; j++, x--)    /// verific daca pe diagonala st-jos nu exista nici o dama
        if(dame[x] == j)
            return false;
    return true;
}

void backtracking(int k)
{
    if (k == n+1)
    {
        if (!prima_sol)
        {
            //cout << "solutia: " ;
            print();
            prima_sol = true;
            nr++;
        }
        else nr++;
    }
    else
    {
        for (int i = 1; i <= n; i++)
        {
            //cout << i << " " << k << " \n";
            //print();
            if(verify(i,k)== true)
            {
                dame[k] = i;
                backtracking(k+1);
            }
        }
    }
    return;
}

int main()
{
    fin >> n;
    backtracking(1);
    fout << nr;
    return 0;
}