Pagini recente » Cod sursa (job #2757926) | Cod sursa (job #628900) | Cod sursa (job #2227034) | Cod sursa (job #2692401) | Cod sursa (job #1490738)
#include <cstdio>
#include <cstring>
const int NMAX = 15;
const int LMAX = 31;
bool markColumn[NMAX], markFstDiag[LMAX], markSndDiag[LMAX];
int n, sol[NMAX], curr[NMAX], noSol;
void back(int k) {
if (k == n + 1) {
noSol++;
if (noSol == 1) {
memcpy(sol, curr, sizeof(curr));
}
return ;
}
for (int i = 1; i <= n; i++)
if (!markColumn[i] && !markFstDiag[k - i + NMAX] && !markSndDiag[k + i]) {
curr[k] = i;
markColumn[i] = markFstDiag[k - i + NMAX] = markSndDiag[k + i] = true;
back(k + 1);
markColumn[i] = markFstDiag[k - i + NMAX] = markSndDiag[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]);
if (i < n) printf(" ");
}
printf("\n");
printf("%d\n", noSol);
return 0;
}