题解 | #八皇后#
八皇后
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; }