八皇后回溯法.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
八皇后回溯法,八皇后回溯法课件,八皇后回溯法PPT

* 回溯法 * 1 回溯法及基本思想 2 回溯法应用 例1 八皇后问题 a盲目的枚举算法 b加约束的枚举算法 c递归回溯算法 d非递归回溯算法 例2 n皇后问题 2.1 再说递归 2.2 有哪些信誉好的足球投注网站代价 * 有“通用的解题法”之称。 回溯法的基本做法是有哪些信誉好的足球投注网站,或是一种组织得井井有条的,能避免不必要有哪些信誉好的足球投注网站的穷举式有哪些信誉好的足球投注网站法。这种方法适用于解一些组合数相当大的问题。 回溯法在问题的解空间树中,按深度优先策略,从根结点出发有哪些信誉好的足球投注网站解空间树。算法有哪些信誉好的足球投注网站至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的有哪些信誉好的足球投注网站,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略有哪些信誉好的足球投注网站。 1 回溯法 回溯法指导思想——走不通,就掉头。 * 求问题所有解:要回溯到根,且根结点的所有子树都已被有哪些信誉好的足球投注网站遍才结束。 求任一解:只要有哪些信誉好的足球投注网站到问题的一个解就可结束。 1 回溯法 * 1 回溯算法设计过程 step1 确定问题的解空间; step2 确定结点的扩展规则; step3 有哪些信誉好的足球投注网站解空间。 * 2 回溯法应用-例1 八皇后问题 n皇后问题 要在n*n的国际象棋棋盘中放n个皇后,使任意两个皇后都不能互相吃掉。规则:皇后能吃掉同一行、同一列、同一对角线的任意棋子。求所有的解。 n=8 * 2 回溯法应用-例1 八皇后问题 设八个皇后为xi,分别在第i行(i=1,2,3,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),1≤xi≤8(i=1,2,3,4……,8),共88个状态; 约束条件:八个(1,x1),(2,x2) ,(3,x3),(4,x4) ,(5,x5), (6,x6) , (7,x7), (8,x8)不在同一行、同一列和同一对角线上。 原问题即:在解空间中寻找符合约束条件的解状态。 按什么顺序去搜? 目标是没有漏网之鱼,尽量速度快。 * 枚举得有个顺序,否则轻则有漏的、重复的;重则无法循环表示。 2 回溯法应用-例1 a 盲目的枚举算法 a 盲目的枚举算法 通过8重循环模拟有哪些信誉好的足球投注网站空间中的88个状态; 按枚举思想,以DFS的方式,从第1个皇后在第1列开始有哪些信誉好的足球投注网站,枚举出所有的“解状态”: 从中找出满足约束条件的“答案状态”。 约束条件? 不在同一列:xi≠xj; 不在同一主对角线上:xi-i ≠ xj-j; 不在同一负对角线上:xi+i ≠ xj+j。 违规的情况可以整合改写为: abs(xi - xj)=abs( i-j )) or (xi = xj) * 2 例1 a 盲目的枚举算法 queen1( ) { int a[9]; for?(a[1]=1;a[1]=8;a[1]++)??    for?(a[2]=1;a[2]=8;a[2]++)??   for?(a[3]=1;a[3]=8;a[3]++)??    for?(a[4]=1;a[4]=8;a[4]++) for?(a[5]=1;a[5]=8;a[5]++) for?(a[6]=1;a[6]=8;a[6]++)?? for(a[7]=1;a[7]=8;a[7]++) for(a[8]=1;a[8]=8;a[8]++){ if (check(a,8)=0) continue; else for(i=1;i=8;i++) print(a[i]); } } check1(a[],n) {int i,j; for(i=2;i=n;i++)   for(j=1;j=i-1;j++)   if (a[i]=a[j]) or (abs(a[i]-a[j])=abs(i-j)) return(0); return(1); } 双重循环,任意两个皇后之间都必须检查。 用a[1]~a[8]存储x1~x8 * 2 回溯法应用-例1 b加约束的枚举算法 如果能够排除那些没有前途的状态,会节约时间; 如何提前发现? 回溯法指导思想——走不通,就掉头 如(1,1, x3,x4,x5,x6,x7,x8)没有必要再扩展; 这种状态扩展后会产生86个结点; 同样的(1,2, x3,x4,x5,x6,x7,x8),…也应被排除。 在每一次扩展E结点后,都进行检查; 对检查结果如何处理?

文档评论(0)

netball + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档