问题描述:
要在8*8的国际象棋棋盘中放8个皇后,使任意两个皇后都不能互相吃掉。规则是皇后能吃掉同一行、同一列、同一对角线的棋子。如下图即是两种方案:
思路:
比如我们搞个数组,数组的下表表示多少行,然后数值表示多少列,比如a[4] = 5,意思就代表第四行,第五列
首先看不再同一行、同一列、同一对问题,我们数组依次增大,所以不会同行,至于同列,我们可以推出a[i] = a[j]说明同列
同一对角线我们知道是等腰直角三角形,我们可以退出行之差和列之差会相等,也就是说fabs(a[i] - a[j]) = fabs(i - j);
注意这里的fabs函数是求绝对值
然后我们搜索,如果遇到当前不满足条件的情况下,就回退下,知道满足条件为止,也就是说的回溯思想
这里我用最简单最好理解的代码实现一次,后面还会用简单的代码和递归实现
代码实现:
#include<stdio.h>
#include<math.h>int a[512] = {1};int check_