Flyod算法求最短路径.docVIP

  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文档。上传文档
查看更多
一、问题分析和任务定义: [课题MVNUM)和边数e(范围0 - (n*(n-1))/2),顶点信息i,j(字符型)(范围0 - MVNUM),边的权值 w ( 整型) 2.2输出数据:建立的邻接矩阵,有向图的邻接矩阵,最短路径和最短路径长度(范围0–MANUM) 节点数边数 3 3 3 3 边的信息 1 2 7 2 3 9 1 3 2 1 2 3 2 3 4 1 3 11 矩阵输出 ∞ 7 ∞ ∞ ∞ 9 ∞ ∞ ∞ ∞ 3 11 ∞ ∞ 4 ∞ ∞ ∞ 输出最短路径: 1-2:路径长度为:7 路径为:1-2 1-3:路径长度为:2 路径为:1-3 ③ 2-1:不存在路径 ④ 2-3:路径长度为9 路径为:2-3 ⑤ 3-1:不存在路径 ⑥ 3-2:不存在路径 1-2:路径长度为: 3 路径为:1-2 1-3:路径长度为: 7 路径为:1-2-3 ③ 2-1:不存在路径 2-3:路径长度为: 4 路径为:2-3 ⑤ 3-1:不存在路径 ⑥ 3-2:不存在路径 二、概要设计和数据结构的选择: 本次课程设计的数据的相关定义和主要程序段如下: 1、数据类型的定义 typedef char VertexTYpe;//定义顶点的值类型 typedef int Adjmatrix;//定义顶点的权值 typedef struct{//定义图的结构 VertexTYpe vexs[MVNUM];//顶点数组,类型定义为char 型 Adjmatrix arcs[MVNUM][MVNUM];//领接矩阵为int 型 }MGraph; int D1[MVNUM],p1[MVNUM]; int D[MVNUM][MVNUM],p[MVNUM][MVNUM]; //设置为全局变量,存放每对节点的路径和长度 图1 流程图说明,首先开始程序输入边数和节点数,调用建图函数进行建图操作,对建好的图可以有选择进行矩阵的输出与否,再选择不同的Floyd算法来求 最短路径的可以有不同的输出形式,在结束每一种显示方法后,都可以返回到选择界面,直到选择3退出程序。 三、详细设计和编码: 我们可以从以下几个方面进行分析: 1.弗罗伊德(Floyd)算法的基本思想如下: 对我们输入的有向网G=(V , E) i , j∈V 用邻接矩阵arcs[i][j]表示有向网。若 i 到 j 有一条弧 i j ,则存在arcs[i][j] 为从 i 到 j 的路径长度,但它不一定是从 i 到 j 的最短 路径长度。我们应依次考虑 i 到 j 能否有以顶点1、2、…n 为中间结点的更短路径,这样进行不短的试探。 1.1首先考虑从 i 到 j是否有以顶点 1 为中间结点的路径。 即:是否有 i 1 、 1 j ,若有,则比较arcs[i][j] 与arcs[i][1]+ arcs[1][j]较短者为当前所求得的最短路径。 此时应修正arcs[i][j] 的值,并记下 i 的后继1。此时arcs[i][j] 的值是从 i 到 j 、中间顶点数不大于 1 时的最短路径。 1.2 其次,考虑从 i 到 j 是否有包含顶点 2 为中间点的路径。若无,则从 i 到 j 的最短路径是(1)步求得的;若有,则 i …2…j 可分解为两条路径:i …2 、2…j --这两条路径的最短路径是是在(1)步求得的,(即i …2 、2…j可分别看作 (1)步中的 i 、j,它们之间有数量不超过 1 的结点)比较arcs1[i][j] 与arcs1[i][2]+ arcs1[2][j] , 可修正arcs1[i][j] 的值为arcs2[i][j] (它是当前求得的从 i 到 j 、中间顶点数不大于 2 时的最短路径)。 1.3 依次类推,直到考虑了顶点 n 加入当前从 i 到 j 的最短路径后,得出最新的最短路径arcsn[i][j] 是从 i 到 j 之间经过的顶点数不大于 n 时的最短路径长度---现已考虑了所有顶点作为中间点的可能性,因而它必是从 i 到 j 的最短路径。 由此看出,弗罗伊德(Floyd)算法实际是通过一系列矩阵D0 、 D1 、D2 … Dn 、来实现求解。其中,Dkij 即arcs[i][j] ,表示从 i 到 j 之间经过的顶点数=k 时的最短路径长度。 讨论的焦点: 由Dk-1 求Dk if (Dk-1[i][k] +

文档评论(0)

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

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

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档