收藏 分享(赏)

图的存储与Dijkstra算法求最短路径.ppt

上传人:精品资料 文档编号:8895334 上传时间:2019-07-16 格式:PPT 页数:28 大小:395.36KB
下载 相关 举报
图的存储与Dijkstra算法求最短路径.ppt_第1页
第1页 / 共28页
图的存储与Dijkstra算法求最短路径.ppt_第2页
第2页 / 共28页
图的存储与Dijkstra算法求最短路径.ppt_第3页
第3页 / 共28页
图的存储与Dijkstra算法求最短路径.ppt_第4页
第4页 / 共28页
图的存储与Dijkstra算法求最短路径.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、图的存储与Dijkstra算法求最短路径,什么是图,图的分类,有向图 带权有向图 无权有向图 无向图 带权无向图 有权无向图,图的表示方法,邻接矩阵 邻接表 前向星,图的邻接矩阵表示法,对于有n个顶点的图,用一维数组vexsn存储顶点信息,用二维数组Ann存储顶点之间关系的信息。该二维数组称为邻接矩阵。在邻接矩阵中,以顶点在vexs数组中的下标代表顶点,邻接矩阵中的元素Aij存放的是顶点i到顶点j之间关系的信息。,无向无权图的邻接矩阵表示,无向带权图的邻接矩阵表示,有向无权图的邻接矩阵,有向带权图的邻接矩阵,图的邻接表表示法,链表中的结点称为表结点,每个结点由三个域组成,如图7-9(a)所示。

2、其中邻接点域(adjvex)指示与顶点Vi邻接的顶点在图中的位置(顶点编号),链域(nextarc)指向下一个与顶点Vi邻接的表结点,数据域(info)存储和边或弧相关的信息,如权值等。对于无权图,如果没有与边相关的其他信息,可省略此域。每个链表设一个表头结点(称为顶点结点),由两个域组成,如图7-9(b)所示。链域(firstarc)指向链表中的第一个结点,数据域(data) 存储顶点名或其他信息。,无向无权图的邻接表表示法,表示空指针,前向星,数组下标: 1 2 3 4 5 6 7 8 9 10 11,0 0 1 0 3 0 2 6 4 8,2 1 3 1 4 1 4 2 4 3,5 7

3、9 10,next:,to:,head:,依次存储的边为:(1,2)、(2,1)、(1,3)、(3,1)、(1,4)、(4,1)(2,4)、(4,2)、(3,4)、(4,3),图的遍历,深度优先遍历(DFS) 广度优先遍历(BFS),图的最小生成树,如果连通图是一个带权图,则其生成树中的边也带权,生成树中所有边的权值之和称为生成树的代价。最小生成树(Minimum Spanning Tree) :带权连通图中代价最小的生成树称为最小生成树。,求最小生成树的算法,普里姆(Prim)算法 克鲁斯卡尔(Kruskal)算法,普里姆(Prim)算法求最小生成树的过程,克鲁斯卡尔(Kruskal)算法求

4、最小生成树的过程,求最短路径,求单源最短路径:Dijkstra(迪杰斯特拉)算法,时间复杂度O(n2) 求全局最短路径:Floyd算法,时间复杂度O(n3)使用者两种算法的条件:要求必须是无环图,Dijkstra算法(求顶点A到其他顶点的最短距离),算法思想如下: 初始化源点A到其他顶点的距离,若其他顶点与源点A无直接相连的边,则认为源点A到该顶点的距离为无穷大(程序中使用int或long long的最大值表示无穷大); 选择当前距离源点A最近的顶点X(注意:顶点X必须未被选择过); 以X点为参照,更新源点A到其他未被选择过的点M的距离 若A-X-M小于A-M距离,则使用新距离替换原距离; 若

5、A-X-M大于等于A-M距离,则保持原距离不变; 重复步骤2、3,直到选取完所有的点为止。,求解过程: 初始化源点A到 B、C、D、E、F、G、H、I 的路径长度 从 B、C、D、E、F、G、H、I 中选择到源点A距离最小的顶点,该顶点为B 以B为参照更新源点A到 C、D、E、F、G、H、I 的路径长度 如果新路径长度小于原长度,则用新的长度作为A到该点的路径长度 基于新的路径长度,重复步骤2、3。选择距离A点最近且未被选择过的点,直到选取完所有点,Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大)第1步,3,4,3,*,6,*,*,4,*,*,B,A-B- C 路径长度为4

6、(4 *),A-B- D 路径长度为* (*等于*),*,A-B- E 路径长度为* (*等于*),*,A-B- F 路径长度为* (* 6),6,A-B- G 路径长度为* (* 4),4,A-B- H 路径长度为10 (10*),10,A-B-I 路径长度为* (*等于*),*,Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大) 第2步,求解过程: 继续从 C、D、E、F、G、H、I(需排除上一轮已被选择过的顶点B) 中选择距源点A最近的点C 以点C为参照更新源点A到 D、E、F、G、H、I 的路径长度 如果新路径长度小于原路径长度,则用新的长度作为A到该点的路径长度 基于

7、新的路径长度,重复步骤1、2。,3,4,3,*,6,*,*,4,*,*,B,*,*,6,4,10,*,C,3,4,A-(B)C-D 路径长度为:4 + 8 = 12 (12 *),12,A-(B)C-E 路径长度为:4 + * = * (* = *),*,A-(B)C-F 路径长度为:4 + 1 = 5 (56),5,A-(B)C-G 路径长度为:4 + 2 = 6 (64),4,A-(B)C-H 路径长度为:4 + * = * (*10),10,A-(B)C-I 路径长度为:4 + 9 = 13 (13*),13,Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大) 第3步,3

8、,4,3,*,6,*,*,4,*,*,B,*,*,6,4,10,*,C,3,4,12,*,5,4,10,13,G,3,AGD 路径长度为:4 + * = * (* 12),4,继续从 D、E、F、G、H、I 中选择距源点A最近的点G(需排除前2轮已选择过的顶点B、C) 参照G更新源点A到 D、E、F、H、I 的路径长度,4,12,AGE 路径长度为:4 + * = * (* = *),*,AGF 路径长度为:4 + * = * (* 5),5,AGH 路径长度为:4 + 4 = 8 (8 10),8,AGI 路径长度为:4 + * = * (* 13),13,Dijkstra算法(求A到其他顶

9、点的最短距离,注:*表示无穷大) 第4步,A-(B、C)-FD 路径长度为:5 + * = * (* 12),继续从 D、E、F、H、I 中选择距源点A最近的点F(需排除前3轮已选择过的顶点B、C、G) 参照F更新源点A到 D、E、H、I 的路径长度,F,12,A-(B、C)-FE 路径长度为:5 + * = * (* = *),*,A-(B、C)-FH 路径长度为:5 + 2 = 7 (7 8),7,A-(B、C)-FI 路径长度为:5 + * = * (* 13),13,Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大) 第5步,A-(B、C、F)-HD 路径长度为:7 +

10、 3 = 10 (10 12),继续从 D、E、H、I 中选择距源点A最近的点H(需排除前4轮已选择过的顶点B、C、F、G) 参照H更新源点A到 D、E、I 的路径长度,F,12,*,7,13,H,10,A-(B、C、F)-HE 路径长度为:7 + * = * (* = *),*,A-(B、C、F)-HI 路径长度为:7 + 4 = 11 (11 13),11,Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大) 第6步,A-(B、C、F、H)-DE 路径长度为:10 + 5 = 15 (15 *),继续从 D、E、I 中选择距源点A最近的点D(需排除前5轮已选择过的顶点B、C、

11、F、G、H) 参照D更新源点A到 E、I 的路径长度,F,12,*,7,13,H,10,*,11,D,15,A-(B、C、F、H)-DI 路径长度为:10 + * = * (* 11),11,Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大) 第7步,A-(B、C、F、H)-IE 路径长度为:11 + 4 = 15 (15 = 15),1、继续从 E、I 中选择距源点A最近的点I(需排除前6轮已选择过的顶点B、C、D、F、G、H),F,12,*,7,13,H,10,*,11,D,15,11,15,I,2、参照I更新源点A到 E的路径长度,Dijkstra算法的求解思想,每次,都以已经求出的最短路径为基础,去求解到其他顶点的最短路径。 该过程与动态规划“由一个阶段的最优解,推出其他阶段的最优解类似” 因此Dijkstra运用了“动态规划”的求解思想。,谢谢观赏!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报