Cod sursa(job #2296762)

Utilizator slym777Darii Dan slym777 Data 5 decembrie 2018 00:07:01
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 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 lin[Nmax],diag_prin[Nmax*2],diag_sec[Nmax*2];

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

bool verify(int i,int k)
{
    return !lin[i] && !diag_prin[k-i+n] && !diag_sec[k+i-1];
}

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";
            if(verify(i,k))
            {
               // cout << verify(i,k) << "\n";
                dame[k] = i;
                lin[i] = true;
                diag_prin[k - i + n] = true;
                diag_sec[k + i - 1] = true;
                backtracking(k+1);
                lin[i] = diag_prin[k - i + n] = diag_sec[k + i -1] = false;
            }
        }

    }
    return;
}

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