广度优先遍历基于邻接表.ppt

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

9. 图的应用 ——最短路径(1) 7.9 图的应用——最短路径(1) 7.9.1 背景 最短路径的典型应用是旅游路线的选择问题。 迪科斯彻 (E.W.Dijkstra,1930-2002),荷兰人, 著名计算机科学家。1972年获得图灵奖。Dijkstra的贡献有:提出“goto有害论”,提出信号量和PV原语,解决了有趣的“哲学家聚餐”问题,创造最短路径算法和银行家算法等 7.9.2 分类和评价 最短路径问题分为两种 求从某一点出发到其余各点的最短路径——用迪科斯彻(Dijkstra)算法 求图中每一对顶点之间的最短路径——用佛罗依德(Floyd)算法(又称为Floyd-Warshall算法) 虽然可以通过以图中每个顶点为源点重复调用n次Dijkstra算法来求出每一对顶点之间的最短路径,但是用Floyd算法可以更高效。这两种做法的时间复杂度都是O(n3)。 7.9 图的应用——最短路径(1) 7.9.2 分类和评价 Dijkstra算法局限于边的权值非负的情况。负权边情况可以用Bellman-Ford等算法。 Floyd算法可以在任何图中使用,包括带负权边的图。 什么时候边权重为负值? 比如:A上班离家里很远,他要选择一条从家里到公司的最佳路径,使得费用最小。而公司的话,对于做公交车的那段路有补贴,且补贴的钱大于坐公交车的费用,此时,在计算最小费用的时候,这条边的权值就应该定义为负值 7.9 图的应用——最短路径(1) 7.9.3 Dijkstra算法思路 对于图G=(V,E),将图中的顶点分成两组: 第一组S:已求出的最短路径的顶点集合。 第二组V-S:尚未求出的最短路径的顶点集合。 算法将按最短路径长度的递增顺序逐个将第二组的顶点加入到第一组中,直到所有顶点都被加入到第一组顶点集S为止。 7.9 图的应用——最短路径(1) 7.9.3 Dijkstra算法思路 Dijkstra算法的动画 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 问题:求解下图中从v1到其他顶点的最短距离。 7.9 图的应用——最短路径(1) 第一步,开始S={v1}。 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 i 1 2 3 4 5 6 path[i] v1 ? ? ? ? ? dist[i] 0 50 10 ∞ 45 ∞ path[i]中存放顶点i的当前最短路径(为区分中间结果和最后结果,这里只显示最后结果)。 dist[i]中存放顶点i的当前最短路径长度。 第二步,v3的dist[i]最小,因此把v3加入S。 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 i 1 2 3 4 5 6 path[i] v1 ? ?v1v3 ? ? ? dist[i] 0 50 10 25 45 ∞ 第三步,v4的dist[i]最小,因此把v4加入S。 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 i 1 2 3 4 5 6 path[i] v1 ? ?v1v3 ?v1v3v4 ? ? dist[i] 0 45 10 25 45 ∞ 第四步,v2和v5的dist[i]最小,因此把v2和v5加入S。 7.9 图的应用——最短路径(1) 7.9.4 Dijkstra算法举例 i 1 2 3 4 5 6 path[i] v1 ?v1v3v4v2 ?v1v3 ?v1v3v4 ?v1v5 ? dist[i] 0 45 10 25 45 ∞ 第五步,v6没改进,还是∞。算法结束。 10. 图的应用 ——最短路径(2) 7.10.1 Floyd算法思路 算法分成n个步骤(n是顶点数量)。 在第k(k=1,...,n)步,判断所有的i和j(i=1,...,n,j=1,...,n)两个顶点之间距离能否通过第k个顶点而缩短。即若有i和j之间的当前距离dist(ij)> dist(ik)+ dist(kj),则更新dist(ij)。 当查完所有的k时,dist(ij)里面存放的就是i到j之间的最短距离了。 7.10 图的应用——最短路径(2) 7.10.2 Floyd算法举例 问题:求解下图中每一对顶点之间的最短距离。 7.10 图的应用——最短路径(2) 初始状态 7.10 图的应用——最短路径(2) 7.10.2 Floyd算法举例 第一步 对不在三条线上的元素进行判断。举例说明,因为dist(3,2)=∞>dist(3,1)+dist(1,2)=20+50=70 所以dist(3,2)更新为70 7.10 图的应用——最短路径(2) 7.10.2 Floyd算法举例 第二步 7.10 图的应用——最短路径(2) 7.10.2 Floyd算法举例 第三步 7

文档评论(0)

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

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

1亿VIP精品文档

相关文档