Cod sursa(job #2296741)

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

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

int dame[Nmax];
int n,nr = 0;
bool viz[Nmax];

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 (nr < 1)
        {
            //cout << "solutia: " ;
            print();
            nr++;
        }
        else nr++;
    }
    else
    {
        for (int i = 1; i <= n; i++)
        {
            //cout << i << " " << k << " \n";
            //print();
            if(verify(i,k)== true && !viz[i])
            {
                dame[k] = i;
                viz[i] = true;
                backtracking(k+1);
                viz[i] = false;
            }
        }

    }
    return;
}

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