Pagini recente » Cod sursa (job #2278537) | Cod sursa (job #669170) | Cod sursa (job #2455692) | Cod sursa (job #1295395) | Cod sursa (job #2296741)
#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;
}