题解 | #八皇后#

八皇后

https://www.nowcoder.com/practice/fbf428ecb0574236a2a0295e1fa854cb

#include <stdio.h>
#define N 20
int a[N];
int col[N], dg[N], udg[N];
int n;
static int m = 1;
void Dfs(int u) {
    if (u == 8) {
        if(m == n){
             for (int i = 0; i < u; i ++) {
               //a[i]从0开始,所以要加一,代表实际的第i列 
			   printf("%d",a[i] + 1);
            }   
            printf("\n");

        }
	  //当前排列不是第n个,则继续寻找下一个
        m += 1;
        return;
    }
    for (int i = 0; i < 8; i ++) {
	  //所在列,主对角线,副对角线是否有其他皇后
        if (!col[i] && !dg[u + i] && !udg[u - i + 8]) {
            a[u] = i;
            col[i] = 1;
            dg[u + i] = 1;
            udg[u - i + 8] = 1;
            Dfs(u + 1);
            col[i] = 0;
            dg[u + i] = 0;
            udg[u - i + 8] = 0;

        }
    }
}


int main() {

    while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to
        Dfs(0);
    }
    return 0;
}

全部评论

相关推荐

头像
04-09 14:29
Java
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务