- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最短路径问题的求解 下面我们以具体例题来看看这类问题的解法: 例1、A、B、C、D、E各个城市之间旅费如下图所示。某人想从城市A出发游览各城市一遍,而所用费用最少。试编程序输出结果。 实际上我们知道,递归、深度搜索等算法一般用于求所有解问题(例如求A出发每个城市走一遍一共有哪几种走法),而这几种算法对于求最短路径这类最优解问题显然是不合适的,以下介绍的几种算法就要优越很多。const dis:array[1..5,1..5] of integer =( ( 0, 7, 3,10,15), ( 7, 0, 5,13,12), ( 3, 5, 0, 5,10), (10,13, 5, 0,11), (15,12,10,11, 0)); 以下是几种解法: 一、 宽度优先搜索 宽度优先搜索并不是一种很优秀的算法,只里只是简单介绍一下它的算法。 具体方法是: 1、 A点开始依次展开得到AB、AC、AD、AE四个新结点(第二层结点),当然每个新结点要记录下其距离;2、 AB展开得到ABC、ABD、ABE三个新结点(第三层结点),而由AC结点可展开得到ACB、ACD、ACE三个新结点,自然AD可以展开得到ADB、ADC、ADE,AE可以展开得到AEB、AEC、AED等新结点,对于每个结点也须记录下其距离;3、 ABCD、ABCE、ABDC、ABDE、ABEC、ABED……AEDB、AEDC,每个结点也需记录下其距离;4、 ABCDE、ABCED、……、AEDBC、AEDCB,每个结点也需记录下其距离;5、 由上可见,这种算法也是把所有的可能路径都列出来再找最短的那条,显而易见这也是一种很费时的算法。 二、 A*算法A*算法是在宽度优先搜索算法的基础上,每次并不是把所有可展的结点展开,而是对所有没有展开的结点,利用一个自己确定的估价函数对所有没展开的结点进行估价,从而找出最应该被展开的结点(也就是说我们要找的答案最有可能是从该结点展开),而把该结点展开,直到找到目标结点为止。A*算法实现起来并不难,只不过难在找准估价函数,大家可以自已找资料看看。 等代价搜索法也是基于宽度优先搜索上进行了部分优化的一种算法,它与A*算法的相似之处都是每次只展开某一个结点(不是展开所有结点),不同之处在于:它不需要去另找专门的估价函数,而是以该结点到A点的距离作为估价值,也就是说,等代价搜索法是A*算法的一种简化版本。它的大体思路是:1、 A点开始依次展开得到AB(7)、AC(3)、AD(10)、AE(15)四个新结点,把第一层结点A标记为已展开,并且每个新结点要记录下其距离(括号中的数字);2、 AB、AC、AD、AE四个结点中距离最小的一个展开,即展开AC(3)结点,得到ACB(8)、ACD(16)、ACE(13)三个结点,并把结点AC标记为已展开;3、 AB(7)结点,得到ABC(12)、ABD(20)、ABE(19)三个结点,并把结点AB标记为已展开;4、 ACB(8)结点……;5、 5个字母)时,即得到了结果。A*算法和等代价搜索法并没有象宽度优先搜索一样展开所有结点,只是根据某一原则(或某一估价函数值)每次展开距离A点最近的那个结点(或是估价函数计算出的最可能的那个结点),反复下去即可最终得到答案。虽然中途有时也展开了一些并不是答案的结点,但这种展开并不是大规模的,不是全部展开,因而耗时要比宽度优先搜索小得多。 2、题目基本同例1、但只要求求A到E点的最短路径(并不要求每个城市都要走一遍)。 答案是肯定的,但到底搜索到什么时候才能得到答案呢?这可是个很荆手的问题。 是不是搜索到一个结点是以E结束时就停止呢?显然不对。E为结束的结点全部搜索出来呢?这简直就是宽度优先搜索了,显然不对。E时,这个结点就是我们所要求的答案! 四、Warshall算法i,j间的最短距离(记为Dij)会等于从i点出发到达j点的以任一点为中转点的所有可能的方案中,距离最短的一个。即:Dij=min(Dij,Dik+Dkj,……),1 =k =5。A到E的最短路径。 1、 D;2、 i=1;3、 j=1;4、 repeat5、 c=false; {用以判断第6步是否有某个Dij值被修改过}6、 Dij=min(Dij,Dik+Dkj,……), k=1 to 5 Dij被修改则c=true7、 I=I+18、 J=j+19、
文档评论(0)