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