算法的基本思想如下:
将第i个皇后摆放在第i行,i从1开始,每个皇后都从第1列开始尝试。尝试时判断在该列摆放皇后是否与前面的皇后有冲突,如果没有冲突,则在该列摆放皇后,并考虑摆放下一个皇后;如果有冲突,则考虑下一列。如果该行没有合适的位置,回溯到上一个皇后,考虑在原来位置的下一个位置上继续尝试摆放皇后,……,直到找到所有合理摆放方案。
【C代码】
下面是算法的C语言实现。
(1) 常量和变量说明
n: 皇后数,棋盘规模为n×n
queen[]: 皇后的摆放位置数组, queen[i]表示第i个皇后的位置, 1≤queen[i]≤n
(2) C程序
#include #define n 4 int queen[n+1]; void Show() { /* 输出所有皇后摆放方案 */ int i; printf("("); for (i=1;i<=n;i++) { printf(" %d",queen[i]); } printf(")/n"); } int Place(int j) { /* 检查当前列能否放置皇后,不能放返回0,能放返回1 */ int i; for (i=1;i if( (1) ) ‖ abs(queen[i]-queen[j]) == (j-i)) { return 0; } } return (2) ; } void Nqueen(int j) { int i; for (i=1;i<=n;i++) { queen[j] = i; if( (3) ) { if(j == n) { /* 如果所有皇后都摆放好,则输出当前摆放方案 */ Show(); } else { /* 否则继续摆放下一个皇后 */ (4) ; } } } } int main() { Nqueen (1) ; return 0; }
请先在App中激活(应用市场搜“软考真题”)
2023-04-12
请先在App中激活(应用市场搜“软考真题”)
2019-10-20
请先在App中激活(应用市场搜“软考真题”)
2019-09-29
请先在App中激活(应用市场搜“软考真题”)
2019-11-04
请先在App中激活(应用市场搜“软考真题”)
2019-10-29
请先在App中激活(应用市场搜“软考真题”)
2019-11-02
请先在App中激活(应用市场搜“软考真题”)
2020-04-04
请先在App中激活(应用市场搜“软考真题”)
2020-11-04
请先在App中激活(应用市场搜“软考真题”)
2020-11-04
请先在App中激活(应用市场搜“软考真题”)
2021-05-22
请先在App中激活(应用市场搜“软考真题”)
2021-10-26
请先在App中激活(应用市场搜“软考真题”)
2019-10-26
请先在App中激活(应用市场搜“软考真题”)
2019-11-08
请先在App中激活(应用市场搜“软考真题”)
2020-10-30
请先在App中激活(应用市场搜“软考真题”)
2022-05-01
请先在App中激活(应用市场搜“软考真题”)
2022-05-10
请先在App中激活(应用市场搜“软考真题”)
2022-05-23
请先在App中激活(应用市场搜“软考真题”)
2022-05-24