题解 | #八皇后#
八皇后
https://www.nowcoder.com/practice/fbf428ecb0574236a2a0295e1fa854cb
#include <stdio.h>
#include <stdlib.h>
int pos[8];//记录每行皇后的位置
int sum = 0;//记录解的个数
int f(int in, int j) {//in为当前行,j为当前列,判断当前位置是否与前in行的皇后冲突
for (int i = 0; i < in; i++) {
//for(int k=0;k<8;k++)
if (abs(i - in) == abs(pos[i] - j) || j == pos[i]) {//判断是否同在一条斜线,或同在一条竖线
return 0;
}
}
return 1;
}
void dfs(int index, int n) {
if (index == 8) {//棋盘8行均放好皇后
sum++;//统计解的个数
if (sum == n) {//第n个解时输出答案
for (int p = 0; p < 8; p++) {
printf("%d", pos[p] + 1);
}
printf("\n");
}
}
for (int j = 0; j < 8; j++) {//在当前行,遍历每一列的位置,看是否可以放置皇后
pos[index] = j;
if (f(index, j)) {
dfs(index + 1, n);//递归,判断下一行
}
}
}
int main() {
int n;
while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
dfs(0, n);
sum = 0;
//printf("%d\n",sum);
}
return 0;
}

