数据结构-最短路径_第1页
数据结构-最短路径_第2页
数据结构-最短路径_第3页
数据结构-最短路径_第4页
数据结构-最短路径_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、专题3:最短路径,1,2,3,最短路径的定义,Dijkstra算法,Floyd算法,在非网图中,最短路径是指两顶点之间经历的边数最少的路径。,6.4 最短路径,最短路径,AE:1 ADE:2 ADCE:3 ABCE:3,最短路径,在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径。,AE:100 ADE:90 ADCE:60 ABCE:70,6.4 最短路径,问题描述:给定带权有向图G(V, E)和源点vV,求从v到G中其余各顶点的最短路径。,单源点最短路径问题,应用实例计算机网络传输的问题:怎样找到一种最经济的方式,从一台计算机向网上所有其它计算机发送一条消息。,迪杰斯特拉(Dij

2、kstra)提出了一个按路径长度递增的次序产生最短路径的算法Dijkstra算法。,6.4 最短路径,基本思想:设置一个集合S存放已经找到最短路径的顶点,S的初始状态只包含源点v,对viV-S,假设从源点v到vi的有向边为最短路径。以后每求得一条最短路径v, , vk,就将vk加入集合S中,并将路径v, , vk , vi与原来的假设相比较,取路径长度较小者为最短路径。重复上述过程,直到集合V中全部顶点加入到集合S中。,Dijkstra算法,6.4 最短路径,Dijkstra算法伪代码,6.4 最短路径,设源点v,w表示从顶点v到顶点vj的权值,dist(v, vj)表示从顶点v到顶点vj的最

3、短路径长度,Dijkstra算法的基本思想用伪代码描述如下:,1. 初始化:集合S = v;dist(v, vj) = w, (j=1.n); 2. 重复下述操作直到S = V 2.1 dist(v, vk) = mindist(v, vj), (j=1.n); 2.2 S = S + vk; 2.3 dist(v, vj)=mindist(v, vj), dist(v, vk) + w;,10,50,30,10,100,20,60,S=A AB:(A, B)10 AC:(A, C) AD: (A, D)30 AE: (A, E)100,Dijkstra算法,6.4 最短路径,10,50,30

4、,10,100,20,60,S=A, B AB:(A, B)10 AC:(A, B, C)60 AD: (A, D)30 AE: (A, E)100,Dijkstra算法,6.4 最短路径,10,50,30,10,100,20,60,S=A, B, D AB:(A, B)10 AC:(A, D, C)50 AD: (A, D)30 AE: (A, D, E)90,Dijkstra算法,6.4 最短路径,10,50,30,10,100,20,60,S=A, B, D, C AB:(A, B)10 AC:(A, D, C)50 AD: (A, D)30 AE: (A, D, C, E)60,Dij

5、kstra算法,6.4 最短路径,10,50,30,10,100,20,60,Dijkstra算法,S=A, B, D, C, E AB:(A, B)10 AC:(A, D, C)50 AD: (A, D)30 AE: (A, D, C, E)60,6.4 最短路径,图的存储结构:带权的邻接矩阵存储结构,数组distn:每个分量disti表示当前所找到的从始点v到终点vi的最短路径的长度。初态为:若从v到vi有弧,则disti为弧上权值;否则置disti为。,数组sn:存放源点和已经生成的终点,其初态为只有一个源点v。,数据结构 :,6.4 最短路径,1. 初始化数组dist和s; 2. wh

6、ile (s中的元素个数 distk + G.arcki) pathi = pathk + G.vertexi,Dijkstra算法C+描述,每一对顶点之间的最短路径,问题描述:给定带权有向图G(V, E),对任意顶点vi,vjV(ij),求顶点vi到顶点vj的最短路径。,解决办法1:每次以一个顶点为源点调用Dijkstra算法。显然,时间复杂度为O(n3)。 解决办法2:弗洛伊德提出的求每一对顶点之间的最短路径算法Floyd算法,其时间复杂度也是O(n3),但形式上要简单些。,6.4 最短路径,基本思想:对于从vi到vj的弧,进行n次试探:首先考虑路径vi,v0,vj是否存在,如果存在,则比

7、较vi,vj和vi,v0,vj的路径长度,取较短者为从vi到vj的中间顶点的序号不大于0的最短路径。在路径上再增加一个顶点v1,依此类推,在经过n次比较后,最后求得的必是从顶点vi到顶点vj的最短路径。,Floyd算法,6.4 最短路径,0 4 11 6 0 2 3 0,有向网图 邻接矩阵,Floyd算法,3,4,6,11,2,6.4 最短路径,Floyd算法,dist-1 =,0 4 11 6 0 2 3 0,path-1 =,ab ac ba bc ca,初始化,6.4 最短路径,Floyd算法,dist-1 =,0 4 11 6 0 2 3 0,path-1 =,ab ac ba bc

8、ca,第1次迭代,dist0 =,0 4 11 6 0 2 3 7 0,path0 =,ab ac ba bc ca cab,6.4 最短路径,Floyd算法,第2次迭代,dist0 =,0 4 11 6 0 2 3 7 0,path0 =,ab ac ba bc ca cab,dist1 =,0 4 6 6 0 2 3 7 0,path1 =,ab abc ba bc ca cab,6.4 最短路径,Floyd算法,3,4,6,11,2,第3次迭代,dist2 =,0 4 6 5 0 2 3 7 0,path2 =,ab abc bca bc ca cab,dist1 =,0 4 6 6 0

9、 2 3 7 0,path1 =,ab abc ba bc ca cab,6.4 最短路径,图的存储结构:带权的邻接矩阵存储结构 数组distnn:存放在迭代过程中求得的最短路径长度。迭代公式: 数组pathnn:存放从vi到vj的最短路径,初始为pathij=vivj。,数据结构,6.4 最短路径,void Floyd(MGraph G) for (i=0; iG.vertexNum; i+) for (j=0; jG.vertexNum; j+) distij=G.arcij; if (distij!=) pathij=G.vertexi+G.vertexj; else pathij=; for (k=0; kG.vertexNum; k+) for (i=0; iG.vertexNum; i+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论