【愚公系列】2021年11月 C#版 数据结构与算法解析(递归)
768
2022-05-28
问题描述:
要在8*8的国际象棋棋盘中放8个皇后,使任意两个皇后都不能互相吃掉。规则是皇后能吃掉同一行、同一列、同一对角线的棋子。如下图即是两种方案:
思路:
比如我们搞个数组,数组的下表表示多少行,然后数值表示多少列,比如a[4] = 5,意思就代表第四行,第五列
首先看不再同一行、同一列、同一对问题,我们数组依次增大,所以不会同行,至于同列,我们可以推出a[i] = a[j]说明同列
同一对角线我们知道是等腰直角三角形,我们可以退出行之差和列之差会相等,也就是说fabs(a[i] - a[j]) = fabs(i - j);
注意这里的fabs函数是求绝对值
然后我们搜索,如果遇到当前不满足条件的情况下,就回退下,知道满足条件为止,也就是说的回溯思想
这里我用最简单最好理解的代码实现一次,后面还会用简单的代码和递归实现
代码实现:
#include
#include
int a[512] = {1};
int check_
数据结构
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。