欢迎光临散文网 会员登陆 & 注册

6.7递归-八皇后问题(回溯算法)

2021-12-12 12:19 作者:取悦疾风  | 我要投稿

内容来自尚硅谷Java数据结构与java算法(Java数据结构与算法)_哔哩哔哩_bilibili

写在前面:本文内容大致和原视频内老师的笔记内容相同,会偶尔插入自己的注释和理解,尽量会完成作业

6.7.1八皇后问题介绍

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92)。

1.      第一个皇后先放第一行第一列

2.      第二个皇后放在第二行第一列、然后判断是否OK,如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适

3.      继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解

4.      当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正确解,全部得到.

5.      然后回头继续第一个皇后放第二列,后面继续循环执行1,2,3,4的步骤

6.      示意图

说明:

理论上应该创建一个二维数组来表示棋盘,但是实际上可以通过算法,用一个一维数组即可解决问题. arr[8]={0,4,7,5,2,6,1,3}//对应arr下标表示第几行,即第几个皇后,ar[i]=val , val 表示第i+1个皇后,放在第+1行的第val+1列

6.7.3八皇后问题算法代码实现


6.7递归-八皇后问题(回溯算法)的评论 (共 条)

分享到微博请遵守国家法律