数据结构A第9章(南邮)2014.pptVIP

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

9.7 单源最短路径 9.7 单源最短路径 9.7 单源最短路径 9.7 单源最短路径 9.7 单源最短路径 9.7 单源最短路径 9.7 单源最短路径 9.7 单源最短路径 9.7 单源最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 9.8 所有顶点之间的最短路径 本章小结 9.6.1 单源最短路径 1.单源最短路径问题 给定带权的有向图G=(V,E),源点v?V,求从顶点v到顶点集V中其余各顶点的最短路径。 2. Dijkstra算法 (1)算法思想: 首先求得长度最短的一条最短路径,再求得长度次短的一条最短路径,依此类推,直到从源点到其它所有顶点之间的最短路径都已求得为止。 初始状态时,集合S中只有一个源点,设为顶点v0。首先产生从源点v0到它自身的路径,其长度为0,将v0加入S。 算法的每一步上,按照最短路径值的非递减次序,产生下一条最短路径,并将该路径的终点t?V-S加入S。 直到S=V时算法结束。 把V分成两组: (1)S:存放已求得最短路径的顶点的集合 (2)V-S=T:尚未确定最短路径的顶点集合 迪杰斯特拉算法的具体步骤: 当前最短路径 在算法执行中,一个顶点t?V-S的当前最短路径,是一条从源点v0到顶点t的路径 (v0,…,u,t) 在该路径上,除顶点t 外,其余顶点的最短路径都已求得,即路径(v0,…,u)上所有顶点都属于S。 (v0,…,u,t)是所有这些路径中的最短者。 源点  终点   最短路径   V0     V1 45      V2 10 V3 25 V4 55 V5 ∞ 假设顶点2,3已求出最短路径。 顶点4的当前最短路径是: 路径(0,4)与路径(0,2,3,4)之间的较短者 3. Dijkstra算法用到的数据结构 (1) 图用邻接矩阵; (2)一维布尔数组s 若s[i]为true,表示顶点i在S中,否则表示i在V-S中。? (3) 一维数组d:保存各条最短路径的长度,其中,d[i]存放从源点v0到顶点vi的最短路径长度。在算法执行中,若vi是尚未产生最短路径的顶点,则d[i]被定义为“由已经产生的最短路径上再扩充一条边”所形成的从v0到vi的“当前最短路径”。 (4) 一维数组path:指示该条最短路径。 path[i]给出:从v0到vi的最短路径上,顶点vi前面的顶点。 例如:从v0到v1的最短路径为(v0,v2,v3,v1) 则有path[1]=3 9.7.5 算法的C++程序实现 (1)初始化 (1)s[v0]=true (2)d[i] (3)path[i]: 若v0,vi?E,则 path[i]=0, 否则 path[i]=-1 9.7.5 算法的C++程序实现 (2)求第一条最短路径 第一条最短路径是所有最短路径中的最短者,它必定只包含一条边(v0,k),并满足: 例如: 9.7.5 算法的C++程序实现 (3)更新数组d和path 将顶点k加入S,并对所有的i∈V-S修正d的值,使d中始终是顶点i的当前最短路径长度。 例如 修改d的值 9.7.5 算法的C++程序实现 (4)求下一条最短路径 下一条最短路径的终点,必定是V-S中,具有最短的当前最短路径值的顶点k,满足 9.7.5 算法的C++程序实现 9.7.5 算法的C++程序实现 template class T int ExtMGraphT::Choose(int* d, bool* s) {//选出最小的d[i], i∈V-S int i,minpos; T min; min=INFTY; minpos=-1; for (i=1;in;i++) if (d[i]min !s[i]){ min=d[i];minpos=i; } return minpos; //返回下标位置 } 9.7.5 算法的C++程序实现 template class T void ExtMGr

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档