题解 | #八皇后#

八皇后

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;
}

全部评论

相关推荐

03-29 14:19
东北大学 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务