Pagini recente » Cod sursa (job #2798485) | Cod sursa (job #2899947) | Cod sursa (job #1038369) | Cod sursa (job #2373109) | Cod sursa (job #2669407)
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
int n, x[101], 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;
}