- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用回溯法求解一般哈密尔顿回路问题汇
目 录
引言 - 1 -
1 需求分析 - 2 -
1.1问题的提出 - 2 -
1.2问题的描述 - 2 -
1.3算法的描述 - 3 -
2 概要设计 - 4 -
2.1系统运行环境 - 4 -
2.2算法的实现 - 4 -
2.3接口设计 - 12 -
2.4出错处理设计 - 12 -
2.5维护设计 - 13 -
3 详细设计 - 14 -
3.1算法的分析 - 14 -
3.2程序的思路 - 15 -
3.3程序的实现 - 15 -
3.4设计环境 - 19 -
4 调试分析 - 20 -
4.1有哈密尔顿回路连通图 - 20 -
4.2无哈密尔顿回路连通图 - 22 -
5 总结 - 23 -
参考文献 - 25 -
附录 - 26 -
摘 要
回溯法是一种按照深度优先的策略从根结点开始搜索解空间树的算法,该算法既带有系统性又带有跳跃性,它在包含问题的所有解的解空间树中,按照深度优先的策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一节点时,总是先判定该节点是否肯定不包含问题的解,如果肯定不包含,则跳过对以该节点为跟的子树的系统搜索,逐层向其祖先节点回溯。否则,进入该子树,继续按深度优先的策略进行探索。这种以深度优先的方式系统地搜索问题的解的算法称为回溯法。回溯法可以用来求出问题的全部解,也可以在求出问题的一个解之后停止对问题的求解,即只求该问题是否有解。它适用于解一些组合数较大的问题。哈密尔顿回路路就是判断图中是否存在一条通过所有顶点一次且仅一次的路径。本文主要讲的就是用回溯法来求解一个任意的图中是否存在一条哈密顿通路的问题,并用具体的算法来实现它。
关键词:回溯法 哈密尔顿回路 空间树
引言
回溯法是一个既带有系统性又带有跳跃性的的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树[1]。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束 [2]。而回溯法在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。这种以深度优先的方式系统地搜索问题的解的算法称为回溯法,它适用于解一些组合数较大的问题。
1 需求分析
1.1问题的提出
在求解一些问题(如走迷宫、地图着色等问题)时,题目的要求可能是求出原问题的一种或所有可能的解决方案。这类问题的解往往是由一个一个的步骤或状态所构成的,每一步骤又有若干种可能的决策方案;由于没有固定、明确的数学解析方法,往往要采用搜索的做法,即从某一个初始状态出发,不断地向前(即下一个状态)搜索,以期最终达到目标状态,从而得到原问题的一个解或所有的解。在搜索的过程中,由于问题本身及所采取的搜索方法的特点(如在缺乏全局及足够的前瞻信息的情况下进行搜索等)[3],会导致走到某一状态就走不下去的情况,这时,就必须回头(即回到上一步,而不是回到最初的状态),再尝试其 他的可能性,换一个方向或方法再试试。这样,不断地向前探索、回溯,再向前、再回溯,直至最终得出问题的解,或者一路回溯到出发点(出现这种情况即表示原问题无解)[4] 。注意,这种搜索过程并不是尝试搜索问题解空间中所有的可能状态和路径,而是采用深度优先的方式,沿着一条路径,尽可能深入地向前探索。
1.2问题的描述
1.设计内容:
给出内存分类法的多种应用,给出这些应用对应的算法并编程实现。
2.设计要求:
(1)给出各种分类法的求解算法;
(2)编程实现各种分类法的算法;
(3)对所写的每个算法给出时空复杂性分析。
1.3算法的描述
该算法讲的就是用回溯法求解一个无向图中是否存在哈密尔顿回路的问题。所谓哈密尔顿回路就是指经过图(有向图或无向图)中所有顶点一次且仅一次的通路。用回溯法解哈密尔顿回路问题首先要画出问题的解空间树,该解空间树是一棵最大度是 n 的树(其中 n 为图中的顶点数),树中只有第一个结点的度是 n,其余结点的度都为 n-1(该结点不用与其自身相连)。在编写算法时可以通过判断该边在图的邻接矩阵中的值来剪枝,如果其值不是 1 则说明该边不存在则剪枝不用搜索。由于在求图的哈密尔顿回路时走过的顶点不能再重复走,所以要对已经遍历过的顶点做一个标记,如果在搜索时找到的是一个带有标记的顶点,那么该路径也是不可行的,应剪去。
2 概要设计
此算法设计为用回溯法求解一般哈密尔顿回路问题,设计的主要内容为:给出内存分类法的多种应用,给出各类分类法的求解算法,编程实现各种分类法的算法
文档评论(0)