第8章图第8讲-最短路径和Dijkstra算法.ppt

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

考虑带权有向图,把一条路径(仅仅考虑简单路径)上所经边的权值之和定义为该路径的路径长度或称带权路径长度。 8.5.1 路径的概念 从源点到终点可能不止一条路径,把路径长度最短的那条路径称为最短路径。 8.5 最短路径 路径长度=c1 + c2 + … + cm 路径:(v,v1,v2,… ,u) 1/21   问题描述:给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径,并限定各边上的权值大于或等于0。 8.5.2 从一个顶点到其余各顶点的最短路径 单源最短路径问题:Dijkstra算法 2/21   设G=(V,E)是一个带权有向图, 把图中顶点集合V分成两组: 狄克斯特拉(Dijkstra)求解思路 S v U=V-S u 第1组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径v,… ,u,就将u加入到集合S中,直到全部顶点都加入到S中,算法就结束了)。 第2组为其余未求出最短路径的顶点集合(用U表示)。 3/21 (1)初始化:,S只包含源点即S={v},v的最短路径为0。U包含除v外的其他顶点,U中顶点i距离为边上的权值(若v与i有边v,i)或∞(若i不是v的出边邻接点)。 狄克斯特拉算法的过程 4/21   (2)从U中选取一个距离v最小的顶点u,把u加入S中(该选定的距离就是v  u的最短路径长度)。 S v U=V-S u 5/21   (3)以u为新考虑的中间点,修改U中各顶点j的最短路径长度:若从源点v到顶点j(j∈U)的最短路径长度(经过顶点u)比原来最短路径长度(不经过顶点u)短,则修改顶点j的最短路径长度。 S v U=V-S u j 6/21 顶点v  j的最短路径长度=MIN(cvk+wkj,cvj) S v U=V-S u j v  j的路径: 不经过顶点u 经过顶点u 修改方式 7/21 (4)重复步骤(2)和(3)直到所有顶点都包含在S中。 v j 考虑中间其他所有顶点k,通过比较得到v  j的最短路径 k 8/21 如何存放最短路径长度: 用一维数组dist[j]存储! 源点v默认, dist[j]表示源点  顶点j的最短路径长度。如dist[2]=12表示源点  顶点2的最短路径长度为12。 如何存放最短路径: 从源点到其他顶点的最短路径有n-1条,一条最短路径用一个一维数组表示,如从顶点0  5的最短路径为0、2、3、5,表示为 path[5]={0,2,3,5}。 所有n-1条最短路径可以用二维数组path[][]存储。 ? 算法设计(解决2个问题) 9/21 改进的方法是采用一维数组path来保存: 若从源点v  j的最短路径如下: 则 一定是从源点v  u的最短路径 ? b 反证法证明: 而通过b的路径更短,则v → … a → … u → j不是最短路径 与假设矛盾,问题得到证明。 10 从path[j]推出的逆路径:j,w,u,v 对应的最短路径为:v → u → w → j v w j u v  j的最短路径: 11/21 0 1 3 2 4 5 6 4 7 6 1 6 8 5 6 6 2 4 1 S U dist[] path[] 0 1 2 3 4 5 6 0 1 2 3 4 5 6 {0} {1,2,3,4,5,6} {0, 4, 6, 6, ∞, ∞, ∞} {0, 0, 0, 0, -1, -1, -1} {0,1} {2,3,4,5,6} {0, 4, 5, 6, 11, ∞, ∞} {0, 0, 1, 0, 1, -1, -1} {0,1,2} {3,4,5,6} {0, 4, 5, 6, 11, 9, ∞} {0, 0, 1, 0, 1, 2, -1} Dijkstra算法示例演示 12/21 0 1 3 2 4 5 6 4 7 6 1 6 8 5 6 6 2 4 1 S U dist[] path[] 0 1 2 3 4 5 6 0 1 2 3 4 5 6 {0,1,2} {3,4,5,6} {0, 4, 5, 6, 11, 9, ∞} {0, 0, 1, 0, 1, 2, -1} Dijkstra算法示例演示 {0,1,2,

文档评论(0)

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

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

1亿VIP精品文档

相关文档