Pagini recente » Cod sursa (job #2485060) | Cod sursa (job #2307725) | Cod sursa (job #248878) | Cod sursa (job #1568974) | Cod sursa (job #2296724)
#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;
}