网站大量收购独家精品文档,联系QQ:2885784924

有向图中任意令两点之间的最短路径.doc

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

有向图中任意两点之间的最短路径 问题 求出有向图中任意两点之间的最短路径并打印结果 语言环境 C++ 问题分析 要解决有向图中任意两点之间的最短路径问题首先应解决的问题是 从源点到其余各点的最短路径问题 每一对定点之间的最短路径问题 对于”从源点到其余各点的最短路径问题” 有经典算法-------“迪杰斯特拉算法”.该算法的思想是: (1). 如图(A) 图(A ) 路径长度最短的最短路径的特点: 在这条路径上,必定只含一条弧,并且这条弧的权值最小。 下一条路径长度次短的最短路径的特点: 它只可能有两种情况:或者是直接从源点到该点(只含一条弧); 或者是从源点经过顶点v1,再到达该顶点(由两条弧组成)。 再下一条路径长度次短的最短路径的特点: 它可能有三种情况:或者是直接从源点到该点(只含一条弧); 或者是从源点经过顶点v1,再到达该顶点(由两条弧组成);或者是从源点经过顶点v2,再到达该顶点。 其余最短路径的特点: 它或者是直接从源点到该点(只含一条弧); 或者是从源点经过已求得最短路径的顶点,再到达该顶点。 由以上特点可知: 假设S为已求得最短路径的终点的集合,则可证明:下一条最短路径(设其终点为x)或者是弧(v,x),或者是中间只经过S中的顶点而最后到达终点x的路径。 假设此路径上有一个顶点不在S中,则说明存在一条终点不在S中,而长度比此路径短的路径。但这是不可能的,因为我们是按路径长度递增的次序来产生最短路径的,故长度比此路径短的所有路径均已产生,他们的终点必定在S中,即假设不成立。 设置辅助数组Dist,其中每个分量Dist[k] 表示 当前所求得的从源点到其余各顶点 k 的最短路径。 一般情况下, Dist[k] = 源点到顶点 k 的弧上的权值 或者 = 源点到S中某顶点j的路径长度 + 顶点j到顶点 k 的弧上的权值。 (1). 在所有从原点出发的弧中选取一条权值最小的弧即为第一条最短路径(如图(a )) V0和k之间存在弧  V0和k之间不存在弧 其中的最小值即为最短路径的长度。 (2). 修改其它各顶点的Dist[k]值。假设求得最短路径的顶点为u,若 Dist[u]+G.arcs[u][k]Dist[k] 则将 Dist[k] 改为 Dist[u]+G.arcs[u][k]。 迪杰斯特拉算法程序段 Shortpath(Mgraph G,int v0, int path[], int dist[]) //path[v]为从v0到v的最短路径的前驱顶点, //dist[v]为其当前的最短距离.s为全局变量,s[v]=1, //表示v已在S集合中,即已求得从v0到v的最短距离。 { For(v=0;vG.vexnum;++v) { s[v]=0; dist[v]=G.arcs[v0][v]; If(dist[v]infinity) path[v]=v0; //v0是v的前驱 else path[v]=-1; //v无前驱 } dist[v0]=0; s[v0]=1; //S集中开始时只有v0 { For(i=1;iG.vexnum;++i) { min=infinity; for(w=0;wG.vexnum;++w) if(s[w]==0) //w∈V-S if(dist[w]min) {v=w; min=dist[w];} s[v]=1; //将v加入S for(w=0;wG.vexnum;++w) //调整其余在V-S的点 if(s[w]==0 (dist[v]+G.arcs[v][w]dist[w])) { dist[w]= dist[v] + G.arcs[v][w]; path[w]=v; } } } } 步骤 第一步 第二步 第三步 第四步 第五步 v1 ∞ ∞ ∞ ∞ ∞ 无 v2 10 (v0,v2) v3 ∞ 60 (v0,v2,v3) 50 (v0,v4,v3) v4 30 (v0,v4) 30 (v0,v4) v5 100 (v0,v5) 100 (v0,v5

文档评论(0)

小教资源库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档