迪克斯特拉算法讲解材料.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
迪克斯特拉算法讲解材料.ppt

电子系2000级 数据结构 Data Structure With C or C++ 最短路径 两点间边数最少的路径 可用作交通自动咨询系统 两点间边权重的和最小的路径 用来计算两城市间路程最短, 时间最快,费用最省的路径 两点A,B之间边数最少的路径 从A点出发,对图做广度优先遍历。 从根A到B的路径就是边数最少的路径,也就是中转次数最少的路径。 单源点到其余各点权重和最小的路径 从v0到其余各点的最短路径 v3 v0 v5 v2 v4 50 v1 5 30 60 100 20 10 10 起点 终点 最短路径 长度 v0 v1 v2 v3 v4 v5 (v0,v4) 30 (v0,v2) 10 (v0,v4,v3) 50 (v0,v4,v3,v5) 60 迪克斯特拉Dijkstra算法 按路径长度递增逐步产生最短路径 设集合S存放已经求出的最短路径的终点,开始,S中只有一个源点v0,以后每求得的一条最短路径就将终点加入S,直到全部顶点都加入到S. 定义一个数组 D[n]; n是图的顶点数。 D[i]=从源点v0到顶点vi最短路经的长度。 第一步 取D[i]为v0到vi的边的权值,无边时取值∞, 取一个最小值 D[j1]=min{D[i], in} D[j1]是v0到vj1的最短路径的长度。 第一步 v3 v0 v5 v2 v4 50 v1 5 30 60 100 10 10 1 2 3 4 5 6 D[i] 10 30 100 j1=2 D[2]=10 是v0到v2的最短路径的长度 20 L={v0} L={v0,v2} 迪克斯特拉Dijkstra算法 已经有L={v0,v2} ,下一条最短路径(终点vj2),或者是(v0 vj2), 或者是(v0, vj1,vj2) 。 对每个顶点vi, 比较D[i]与D[j1]+arc[j1][i], 取其小 更新 D[i]=min{D[i], D[j1]+arc[j1][i]} 取 D[j2]=min{D[i], in,i≠j1 } 则 D[j2]是v0到vj2的最短路径的长度。 第二步 v3 v0 v5 v2 v4 50 v1 5 30 60 100 10 10 1 2 3 4 5 6 j D[I] 10 30 100 2 D[i] 60 4 j2=4 D[4]=30 是v0到v4的最短路径的长度 20 L={v0,v2} L={v0,v2,v4} v3 v0 v5 v2 v4 50 v1 5 30 60 100 10 10 1 2 3 4 5 L D[i] 0 10 (v0,v2) 30 (v0,v4) 100 (v0,v5) 2 D[i] 0 60 (v0,v2,v3) 4 D[i] 50 (v0,v4,v3) 0 90 (v0,v4,v5) 3 D[i] 0 60 (v0,v4,v3,v5) 5 20 迪克斯特拉 Dijkstra算法 L={v0,v2,v4,v3,v5} 时间复杂性O(n2) 令L={vj1 ,vj2···,vjk-1}是已经求得的从v0出发的最短路径的终点的集合,可以证明下一条最短路径(终点vjk),是只通过S中顶点到达vjk的 。 否则设v0到vjk的路径中有一个不在S中出现的顶点vp,但是路径v0···vp···vjk比v0···vp长 应当先有v0···vp的最短路径,以归纳假设vp应当已经出现于L中。 template class T struct PathInfo { T startV, endV; int cost; }; template class T int operator = (const PathInfo T a, const PathInfo T b) { return a.cost = b.cos

文档评论(0)

youngyu0329 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档