八皇后问题详细的解法ppt课件.ppt
《八皇后问题详细的解法ppt课件.ppt》由会员分享,可在线阅读,更多相关《八皇后问题详细的解法ppt课件.ppt(23页珍藏版)》请在三一办公上搜索。
1、1,八皇后问题,2,1八皇后问题背景2盲目的枚举算法3加约束的枚举算法4回溯法及基本思想5 回溯法应用6八皇后问题的递归回溯算法7八皇后问题的非递归回溯算法,3,【背景】 八皇后问题是一个以国际象棋为背景的问题: 如何能够在 88 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。,4,八皇后问题,要在8*8的国际象棋棋盘中放8个皇后,使任意两个皇后都不能互相吃掉。规则:皇后能吃掉同一行、同一列、同一对角线的任意棋子。求所有的解。八皇后的两组解,5,【问题分析】,设八个皇后为xi,分别在第i行(i=1,2,3,
2、4,8);问题的解状态:可以用(1,x1),(2,x2),(8,x8)表示8个皇后的位置;由于行号固定,可简单记为:(x1,x2,x3,x4,x5,x6,x7,x8);问题的解空间:(x1,x2,x3,x4,x5,x6,x7,x8),1xi8(i=1,2,3,4,8),共88个状态;约束条件:八个(1,x1),(2,x2) ,(3,x3),(4,x4) ,(5,x5), (6,x6) , (7,x7), (8,x8)不在同一行、同一列和同一对角线上。,原问题即:在解空间中寻找符合约束条件的解状态。,按什么顺序去搜?目标是没有漏网之鱼,尽量速度快。,6,枚举得有个顺序,否则轻则有漏的、重复的;重
3、则无法循环表示。,2 【问题设计】盲目的枚举算法,a 盲目的枚举算法通过8重循环模拟搜索空间中的88个状态;按枚举思想,以DFS的方式,从第1个皇后在第1列开始搜索,枚举出所有的“解状态”:从中找出满足约束条件的“答案状态”。,约束条件?,1.按什么顺序去查找所有的解 a.盲目的枚举算法 void main() int x100; for (x1=1;x1=10;x1+) for (x2=1;x2=10;x2+) for (x3=1;x3=10;x3+) for (x4=1;x4=10;x4+) for (x5=1;x5=10;x5+) for (x6=1;x6=10;x6+) for (x7
4、=1;x7=10;x7+) for (x8=1;x8=10;x8+) if (check(x)=0) printf(x); ,该如何解决冲突的问题呢?1.行;我们是按照行枚举的,保证了一行一个皇后;2.列:判断是否存在xi=xj3.对角线:主对角线的i-j与从对角线的i+j存在特殊关系,如图:,9,盲目的枚举算法,约束条件?不在同一列:xixj;不在同一主对角线上:xi-i xj-j;不在同一负对角线上:xi+i xj+j。,违规的情况可以整合改写为:abs(xi - xj)=abs( i-j ) or (xi = xj),10,盲目的枚举算法,queen1( ) int a9; for(a1
5、=1;a1=8;a1+) for(a2=1;a2=8;a2+) for(a3=1;a3=8;a3+)for(a4=1;a4=8;a4+) for(a5=1;a5=8;a5+) for(a6=1;a6=8;a6+) for(a7=1;a7=8;a7+) for(a8=1;a8=8;a8+)if (check(a,8)=0) continue; else for(i=1;i=8;i+) print(ai); ,check1(a,n)int i,j; for(i=2;i=n;i+) for(j=1;j=i-1;j+) if (ai=aj) or (abs(ai-aj)=abs(i-j) return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 皇后 问题 详细 解法 ppt 课件
链接地址:https://www.31ppt.com/p-1315308.html