Pagini recente » Cod sursa (job #3185786) | Cod sursa (job #2715850) | Cod sursa (job #2664570) | Cod sursa (job #248673) | Cod sursa (job #1239125)
#include <cstdio>
#include <cstring>
#include <cmath>
#define NMAX 15
#define LMAX 35
using namespace std;
int n, P[NMAX], sol[NMAX], noSol;
bool mark[NMAX], markA[LMAX], markB[LMAX];
void back(int k)
{
if (k == n + 1)
{
noSol++;
if (noSol == 1)
memcpy(sol, P, sizeof(P));
return ;
}
for (int i = 1; i <= n; i++)
if (!mark[i] && !markA[k - i + NMAX] && !markB[k + i])
{
P[k] = i;
mark[i] = true; markA[k - i + NMAX] = true; markB[k + i] = true;
back(k + 1);
mark[i] = false; markA[k - i + NMAX] = false; markB[k + i] = false;
}
}
int main()
{
freopen("damesah.in", "r", stdin);
freopen("damesah.out", "w", stdout);
scanf("%d", &n);
back(1);
for (int i = 1; i <= n; i++)
printf("%d ", sol[i]);
printf("\n");
printf("%d\n", noSol);
return 0;
}