Pagini recente » Cod sursa (job #3222940) | Cod sursa (job #2345740) | Cod sursa (job #1259953) | Cod sursa (job #1686430) | Cod sursa (job #2154553)
#include <fstream>
#include <cmath>
using namespace std;
int n,cnt,sol[15],x[15];
bool valid(int k)
{
for(int i=1; i<k; i++)
{
if(sol[i]==sol[k] || abs(sol[k]-sol[i])==k-i) return false;
}
return true;
}
int backtracking(int n)
{
int k=1,cnt=0;
bool prima=1, ok;
sol[k]=0;
while(k>0)
{
ok=0;
while(sol[k]<n&&!ok)
{
sol[k]++;
ok=valid(k);
}
if(!ok)
{
k--;
}
else
{
if(k == n)
{
if(prima)
{
prima=0;
for(int i=1; i<=n; i++)
{
x[i]=sol[i];
}
}
cnt++;
}
else
{
k++;
sol[k]=0;
}
}
}
return cnt;
}
int main()
{
ifstream fin("damesah.in");
ofstream fout("damesah.out");
fin>>n;
int nr=backtracking(n);
for(int i=1; i<=n; i++)
{
fout<<x[i]<<' ';
}
fout<<'\n'<<nr;
return 0;
}