- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构.第7章讲.图.4.最短路径.pptx
第7章 图图的定义和术语图的存储结构图的遍历图的连通性问题有向无环图及其应用最短路径§7.6 最短路径 最短路径问题典型用途:交通问题。如:城市A到城市B有多条线路,但每条线路的交通费(或所需时间)不同,那么,如何选择一条线路,使总费用(或总时间)最少?问题抽象:在带权有向图中A点(源点)到达B点(终点)的多条路径中,寻找一条各边权值之和最小的路径,即最短路径。(注:最短路径与最小生成树不同,路径上不一定包含n个顶点)§7.6 最短路径 最短路径问题一顶点到其余各顶点两种常见的最短路径问题:一、单源最短路径—用Dijkstra(迪杰斯特拉)算法二、所有顶点间的最短路径—用Floyd(弗洛伊德)算法任意两顶点之间§7.6 最短路径 单源最短路径 (Dijkstra算法)目的: 设一有向图G=(V, E),已知各边的权值,以某指定点v0为源点,求从v0到图的其余各点的最短路径。限定各边上的权值大于或等于0。从F→A的路径有4条:① F→A:24② F→B→A:5+18=23③ F→B→C→A:5+7+9=21④ F→D→C→A:25+12+9=36源点又:从F→B的最短路径是哪条?从F→C的最短路径是哪条?源点终点最短路径路径长度 (, , )(, , )vvvvvv (, )vvvv0120320101 v(,)v v203 v3 (, )(, , )((, , , , , , ))vvvvvvvvvvvvvv40403400132244例:V010100 V0 V1 V2V3 V4V0 ∞ 10 ∞ 30 100V1 ∞ ∞ 50 ∞ ∞ V2 ∞ ∞ ∞ 50 10 V3 ∞ ∞ 20 ∞ 60 V4 ∞ ∞ 20 ∞ ∞ 30V1V4501060V2V32010 60 5030706010090讨论:计算机如何自动求出这些最短路径?§7.6 最短路径 单源最短路径 (Dijkstra算法)思考:V010100 V0 V1 V2V3 V4V0 ∞ 10 ∞ 30 100V1 ∞ ∞ 50 ∞ ∞ V2 ∞ ∞ ∞ 50 10 V3 ∞ ∞ 20 ∞ 60 V4 ∞ ∞ 20 ∞ ∞ 30V1V4501060V2V320§7.6 最短路径 单源最短路径 (Dijkstra算法)算法思想: 先找出从源点v0到各终点vk的直达路径(v0, vk), 即通过一条弧到达的路径。 从这些路径中找出一条长度最短的路径(v0, u), 然后对其余各条路径进行适当调整: 若在图中存在弧(u, vk),且(v0, u)+(u, vk) (v0, vk), 则以路径(v0, u, vk) 代替(v0, vk) 。在调整后的各条路径中,再找长度最短的路径,依此类推。总之,按路径“长度” 递增的次序来逐步产生最短路径§7.6 最短路径 单源最短路径 (Dijkstra算法) 给定带权有向图G和源点v, 求从v到G中其余各顶点的最短路径。V5V560100始点 终点D[i]最短路径V4V0V0V430V1V2V3V4 V5(V0, V2)(V0, V4, V3)(V0, V4)(V0, V4, V3, V5)(V0, V2)(V0, V4, V3)(V0, V4)(V0, V4, V3, V5)∞105030100∞106030100∞10∞30100∞10∞301001050306010503090∞106030100(V0, V2)(V0, V4)(V0, V5)(V0, V2)(V0, V4, V3)(V0, V4)(V0, V5)(V0, V2)(V0, V4, V3)(V0, V4)(V0, V4, V5)(V0, V2)(V0, V4, V3)(V0, V4)(V0, V4, V5)(V0, V2)(V0, V2, V3)(V0, V4)(V0, V5)(V0, V2)(V0, V2, V3)(V0, V4)(V0, V5)(V0, V2)(V0, V4)(V0, V5)V0102010V3V1V3505V2V2§7.6 最短路径 所有顶点对之间的最短路径(Floyd算法)问题描述: 已知一个各边权值均大于 0 的带权有向图,对每对顶点 vi≠vj,要求求出每一对顶点之间的最短路径和最短路径长度。 解决方案: 1. 每次以一个顶点为源点,重复执行迪杰斯特拉算法n次。这样,便可求得每一对顶点之间的最短路径。总的执行时间为O(n3)。 2. 形式更直接的弗洛伊德(Floyd)算法。时间复杂度也为O(n3)。弗洛伊德算法可求解负权值网络!§7.6 最短路径 弗洛
文档评论(0)