Pagini recente » Cod sursa (job #2495033) | Cod sursa (job #403149) | Cod sursa (job #717671) | Cod sursa (job #1421355) | Cod sursa (job #54827)
Cod sursa(job #54827)
#include <stdio.h>
#define NMAX 1001
int n, sol[NMAX], done;
int cused[NMAX];
int dlused[2001], dcused[2001];
#define dlused (dlused+1000)
void place(int k) {
if (k == n) {
int i;
done = 1;
printf("%d\n", n);
for (i = 0; i < n; ++i)
printf("%d %d\n", i+1, sol[i]+1);
}
else if (!done) {
int i;
for (i = 0; i < n; ++i) {
if (!(cused[i] || dlused[k-i] || dcused[k+i])) {
cused[i] = 1, dlused[k-i] = 1, dcused[k+i] = 1;
sol[k] = i;
place(k+1);
cused[i] = 0, dlused[k-i] = 0, dcused[k+i] = 0;
}
}
}
}
int main() {
//FILE *fi = freopen("dame.in", "r", stdin);
//FILE *fo = freopen("dame.out", "w", stdout);
scanf("%d", &n);
if (n == 2)
printf("1\n1 1\n");
else if (n == 3)
printf("2\n1 1\n2 3\n");
else
place(0);
return 0;
}