
文章插图
4.第四层递归,尝试在第四行摆放第四个皇后(第一格被第二个皇后封锁,只能落在第二格):

文章插图
5.第五层递归,尝试在第五行摆放第五个皇后(前三格被前面的皇后封锁,只能落在第四格):

文章插图
6.由于所有格子都“绿了”,第六行已经没办法摆放皇后,于是进行回溯,重新摆放第五个皇后到第八格 。:

文章插图
7.第六行仍然没有办法摆放皇后,第五行也已经尝试遍了,于是回溯到第四行,重新摆放第四个皇后到第七格 。:

文章插图
8.继续摆放第五个皇后,以此类推......

文章插图

文章插图
八皇后问题的代码实现?
解决八皇后问题,可以分为两个层面:
1.找出第一种正确摆放方式,也就是深度优先遍历 。
2.找出全部的正确摆放方式,也就是广度优先遍历 。
由于篇幅优先,我们本篇只介绍如何找出第一种正确摆放方式 。
在研究代码实现的时候,我们需要解决几个问题:
1.国际象棋的棋盘如何表示?
很简单,用一个长度是8的二维数组来表示即可 。

文章插图
由于这里使用的是int数组,int的初始值是0,代表没有落子 。当有皇后放置的时候,对应的元素值改为1 。
在这里,二维数组的第一个维度代表横坐标,第二个维度代表纵坐标,并且从0开始 。比如chessBoard[3][4]代表的是棋盘第四行第五列格子的状态 。
2.如何判断皇后的落点是否合规?
定义一个check方法,传入新皇后的落点,通过纵向和斜向是否存在其他皇后来判断是否合规 。

文章插图
3.如何进行递归回溯?
递归回溯是本算法的核心,代码逻辑有些复杂

文章插图
4.如何输出结果?
这个问题很简单,直接遍历二维数组并输出就可以 。

文章插图
5.如何把这些方法串起来?
在main函数里分三步来调用:
第一步:初始化
第二步:递归摆放皇后
第三步:最后输出结果 。
其中Queen8是整个类的名字 。

文章插图
最终输出如下:
10000000
00001000
00000001
00000100
00100000
00000010
01000000
00010000

文章插图

文章插图
几点补充:
1.由于篇幅原因,这一篇只讲了如何找出第一种正确的八皇后摆放 。大家如果有兴趣,可以对文中的代码稍作改动,实现找出所有八皇后摆放的代码 。
【八字带八绝数组怎么化解 什么是八绝数组】
- 怎么测宽带的网速 如何测宽带网速
- 飞机上哪些东西不能带?
- 火车上可以带酒吗
- 奋斗努力的图片带字 2022奋斗励志图片头像
- 姨妈来的前兆白带 月经前最明显的征兆有哪些
- 孕妇可以戴运动手环手表吗 孕妇能带手表么
- 老人带什么能辟邪保健康 风水先生如何保护自己
- 公交车能带宠物吗
- 白酒可以带上高铁吗
- 带上飞机的充电宝最大容量mAh
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
