Pagini recente » Cod sursa (job #1679622) | Cod sursa (job #1878634) | Cod sursa (job #596248) | Cod sursa (job #2146962) | Cod sursa (job #2669410)
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
long long n, x[5555], nrsol = 0,prim;
bool valid(int k)
{
for(int i = 1; i < k; i++)
if(x[k] == x[i] || k - i == abs(x[k] - x[i]))
return 0;
return 1;
}
void afis()
{
for(int i = 1; i <= n; i++)
fout << x[i] << ' ';
fout << endl;
}
void backt()
{
int k = 1;
x[1] = 0;
while(k > 0)
if(x[k] < n) ///mai avem elemente
{
x[k]++; ///...cautare
if(valid(k)) ///se verifica conditiile de continuare (v.c.c.)
{
if(k == n) ///este solutie
{if(prim==0)
{afis();
prim=1;
}
nrsol++;
k--; ///se poate forta revenirea
}
else
x[++k] = 0; ///avansare + init
}
}
else
k--; ///revenire
}
int main()
{
fin >> n;
backt();
fout << nrsol;
return 0;
}