递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 5817|回复: 2
打印 上一主题 下一主题

[安卓] 【火山数据结构与算法】递归-八皇后问题(回溯算法)

[复制链接]

13

主题

193

帖子

2624

积分

核心用户

QQ:296988258

Rank: 9Rank: 9Rank: 9

积分
2624
QQ
跳转到指定楼层
楼主
发表于 2021-8-11 18:07:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 林峰 于 2021-8-11 18:08 编辑

八皇后问题是一个古老而又著名的问题,是学习回溯算法的一个经典案例。今天我们就一起来探究一下吧!
时间退回到1848年,国际西洋棋棋手马克斯·贝瑟尔提出了这样的一个问题,
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。

后面陆续有不同的学者提出自己的见解。大数学家高斯认为一共有76种摆法,1854年在柏林的象棋杂志上不同的作者发表了共计40种不同的见解,后来还有人利用图论的方法得出共有92种摆法。
现在我们就使用程序的方式来给大家进行解答

八皇后算法思路分析:
1) 第一个皇后先放第一行第一列
2) 第二个皇后放在第二行第一列,然后判断是否符合规则,如果不符合,继续放在第二列、第三列、依次把所有列都放完,直到找到一个合适的
3) 继续第三个皇后,还是第一列、第二列.......直到第8个皇后也能放到一个不冲突的位置,就找到了一个正确解
4) 当得到一个正确的解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后放到第一列的所有正确解全部得到.(重要)
5)然后回头继续将第一个皇后放在第一行第二列,后面继续循环执行 1,2,3步骤
这种思路就是回溯思想,先从某一条路开始走,一条路走到黑,出现死胡同了,就回到上一个路口(回溯),从另一个方向再次出发,又出现死胡同了,就再返回刚刚的路口,直到将该路口的所有岔道走遍了,如果还是走不通,就继续向前回溯,回到上上个路口,直到找到出路为止。

代码实现:
八皇后问题.rar (113.07 KB, 下载次数: 19)


回复

使用道具 举报

17

主题

792

帖子

2744

积分

金牌会员

Rank: 6Rank: 6

积分
2744
沙发
发表于 2021-8-11 23:54:12 | 只看该作者
学习
回复

使用道具 举报

29

主题

317

帖子

4142

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4142
板凳
发表于 2021-8-12 08:31:49 | 只看该作者
谢谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-25 14:52 , Processed in 0.084083 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表