图安工大计算机学院85最短路径.PPT

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

时间复杂度: Floyd算法中初始化部分由一个循环组成,其中外循环运行n次,内循环也运行n次,初始化部分的时间复杂度为O(n2)。迭代生成矩阵A和路径nextvex的部分为三个循环的嵌套,其时间复杂度为O(n3) Floyd算法的时间复杂度为O(n3)   数据结构 第八章 --图 安工大计算机学院 第8章 图 本章中介绍下列主要内容: 图的定义 图的存储结构 图的遍历操作 图的几个典型问题 8.5 最短路径 基本概念: 路径:如果图中从一个顶点可以到达另一个顶点,则这两个顶点间存在一条路径。(从一个顶点到另一个顶点间可能存在多条路径,而每条路径上经过的边数并不一定相同) 路径长度:如果图是一个带权图,则路径长度为路径上各边的权值的总和。 最短路径长度:两个顶点间路径长度最短的那条路径称为两个顶点间的最短路径,其路径长度称为最短路径长度。 8.5.1 从一个顶点到其它各个顶点的最短路径 8.5.2 每一对顶点间的最短路径 8.5.1 从一个顶点到其它各个顶点的最短路径 Dijkstra(迪杰斯特拉)算法∶ 设图G中有n个顶点,设置一个集合U,存放已求出最短路径的顶点,V-U是尚未确定最短路径的顶点集合,每个顶点对应一个距离值,集合U中顶点的距离值是从顶点v0到该顶点的最短路径长度,集合V-U中顶点的距离值是从顶点v0到该顶点的只包括集合U中顶点为中间顶点的最短路径长度。 初始时,集合U中只有顶点v0,顶点v0对应的距离值为0,集合V-U中顶点vi的距离值为边(v0, vi)的权值(i=1,2,…,n-1),如果v0和vi间无边直接相连,则vi的距离值为∞。 在集合V-U中选择距离值最小的顶点vmin加入集合U 对集合V-U中各顶点的距离值进行修正,如果加入顶点vmin为中间顶点后,使v0到vi的距离值比原来的距离值更小,则修改vi的距离值 反复操作,直到从v0出发可以到达的所有顶点都在集合U中为止 准备工作: 设置一个数组dist[n],用于存放顶点v0到其它各顶点的最短路径及其最短路径长度,其存储结构为∶ typedef struct { VexType vertex; /* 顶点信息 (可选)*/ AdjType Vlngth; /* 最短路径长度 */ int prevex; /* 从v0到达vi(i=1,2,…n-1)的最短路径上vi的前趋顶点 */ }Path; Path dist[n]; /* n为图中顶点个数*/ 顶点v0到其它各顶点的最短路径的具体作法 图用邻接矩阵表示法表示 初始时,集合U中只有顶点v0,从顶点v0到其它顶点vi (i=1,2,…,n-1)的最短路径长度为边(v0,vi)的权值。若顶点v0和vi不相邻,则假设存在一条从v0到vi权为无穷的边。 在集合V-U中找出距离值最小的顶点vmin,将其加入集合U,从顶点v0到顶点vmin的最短路径长度就是vmin的距离值。 调整集合V-U中顶点的距离值。如果将新加入的顶点vmin作为中间顶点后,v0到vi (vi∈V-U)的距离值更小,则应修改vi的距离值。 即∶如果dist[i].Vlngthdist[min].Vlngth+graph.arcs[min][i],则将顶点vi的距离值改为dist[min].Vlngth+graph.arcs[min][i],并将路径上vi的前趋顶点改为vmin,即∶dist[i].prevex=min。 重复(2),(3)操作,直到集合V-U中的顶点都加入到集合U中为止。 例:已知带权图G如下所示及其邻接矩阵A,求从顶点v0到其它各顶点的最短路径 ú ú ú ú ú ú ú ú ? ù ê ê ê ê ê ê ê ê ? é ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ ¥ = 0 3 0 30 35 0 20 15 0 20 5 15 0 45 10 50 0 A ①.初始时,集合U中只有顶点v0。 dist[0].Vlngth=0; dist[0].prevex=0; graph.arcs[0][0]=1; for(i=1; igraph.n; i++) { dist[i].Vlngth=graph.arcs[0][i]; if(dist[i].Vlngth!=MAX) dist[i].prevex= 0; else

文档评论(0)

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

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

1亿VIP精品文档

相关文档