问题描述:
- 要在8*8的国际象棋棋盘中放置8个皇后,使任意两个皇后都不能互相吃掉;
- 国际象棋的规则是皇后能吃掉同一行、同一列、同一对角线的棋子;
解题思路:
该题运用到递归回溯,难点在于判断皇后的摆放是否符合题目要求并获取最多解法。
如图所示,在 row=0时,即从第一行第一列位置放置皇后时不受到其他皇后位置的影响(通过notDanger的判断),通过后再次调用EightQueen进行递归并使 row+1(皇后的放置推到下一行),以此类推,如果皇后的放置在该行内找到合适的位置则可以继续调用EightQueen(row+1)直至遍历八行后打印输出;否则将执行清零操作,并控制前一行皇后位置通过for循环列数+1,即调整前一位皇后位置,重复上述步骤。
运行结果如下:
代码如下:
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
typedef int Status;
int count = 0; // 解法
int chess[8][8] = {
0};
Status notDanger(int row, int col)
{
int i,j;
// 判断列方向