data-structure-experiments/4/main.c

61 lines
1.2 KiB
C

#include <stdio.h>
#include <stdlib.h>
int ans, a[10005];
int n;
int cx[100], zx[100], col[100];
void pt() {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (a[i] == j) {
printf("Q");
} else {
printf(".");
}
}
printf("\n");
}
printf("\n");
for (int i = 1; i <= n; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
void dfs(int x) {
if (x > n) {
ans++;
if (ans <= 3) {
pt();
// for (int i = 1; i <= n; i++) {
// printf("%d ", a[i]);
// }
// printf("\n");
}
return;
}
for (int i = 1; i <= n; i++) {
int l = x + i, r = x - i + 15;
if (cx[r] == 0 && zx[l] == 0 && col[i] == 0) {
a[x] = i;
cx[r] = 1;
zx[l] = 1;
col[i] = 1;
dfs(x + 1);
cx[r] = 0;
zx[l] = 0;
col[i] = 0;
}
}
}
int main() {
scanf("%d", &n);
dfs(1);
printf("%d", ans);
return 0;
}
// Ref: P1219 [USACO1.5] 八皇后 Checker Challenge
// https://www.luogu.com.cn/record/40132197