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

合集下载

Dijkstra算法求最短路径

Dijkstra算法求最短路径

在交通网络中,常常会提出许多这样的问题:两地之间是否有路相通?在有多条通路的情况下,哪一条最近?哪一条花费最少等。

交通网络可以用带权图表示,图中顶点表示域镇,边表示两城之间的道路,边上权值可表示两城镇间的距离,交通费用或途中所需的时间等。

以上提出的问题就是带权图中求最短路径的问题,即求两个顶点间长度最短的路径。

最短路径问题的提法很多。

在这里仅讨论单源最短路径问题:即已知有向图(带权),我们希望找出从某个源点S∈V到G中其余各顶点的最短路径。

例如:下图(有向图G14),假定以v1为源点,则其它各顶点的最短路径如下表所示:图G14从有向图可看出,顶点v1到v4的路径有3条:(v1,v2,v4),(v1,v4),(v1,v3,v2,v4),其路径长度分别为:15,20和10。

因此v1到v4的最短路径为(v1,v3,v2,v4 )。

为了叙述方便,我们把路径上的开始点称为源点,路径的最后一个顶点为终点。

那么,如何求得给定有向图的单源最短路径呢?迪杰斯特拉(Dijkstra)提出按路径长度递增产生诸顶点的最短路径算法,称之为迪杰斯特拉算法。

迪杰斯特拉算法求最短路径的实现思想是:设有向图G=(V,E),其中,V={0,2,…,n-1},cost是表示G的邻接矩阵,G.arcs [i][j] .adj 表示有向边<i,j>的权。

若不存在有向边<i,j>,则G.arcs [i][j] .adj 的权为无穷大(这里取值为32767)。

设S是一个集合,其中的每个元素表示一个顶点,从源点到这些顶点的最短距离已经求出。

设顶点v0为源点,集合S的初态只包含顶点v0。

数组D记录从源点到其他各顶点当前的最短距离,其初值为D[i]= G.arcs[v0][i].adj ,i=1,…,n-1。

从S之外的顶点集合V-S 中选出一个顶点w,使D[w]的值最小。

于是从源点到达w只通过S 中的顶点,把w加入集合S中调整D中记录的从源点到V-S中每个顶点v的距离:从原来的D[v] 和D[w]+ G.arcs [w][v] .adj中选择较小的值作为新的D[v]。

迪杰斯特拉求最短路径算法

迪杰斯特拉求最短路径算法

通过使用迪杰斯特拉算法,我们可以找到这些最短 路径,从而帮助决策者做出更好的决策
在这些应用中,我们需要找到从一个地点到另一个 地点的最短路径,以便优化成本、时间和路线等
应用
Tarjan
Robert E. "A Class of Algorithms for Decomposing Disconnected Graphs". Journal of the ACM (JACM) 16.3 (1969): 430-447
在图论中,我们通常用节点表示地点,用边表 示两个地点之间的路径。每条边都有一个与之 相关的权重,表示从一个地点到另一个地点的 距离。迪杰斯特拉算法可以找到从源节点(出 发节点)到目标节点(目的地)的最短路径,即 使在图中存在负权重的边
算法步骤
算法步骤
初始化
01
将源节点的距离设置为0,将所有其他节点的距离
设置为正无穷。创建一个空的优先队列,并将源节
点放入队列
从优先队列中取出距离最小的节点
02
这个节点就是当前最短路径的起点
遍历从这个节点出发的所有边
03
对于每条边,如果通过这条边到达的节点的距离可
以通过当前节点更新(即新距离小于原距离),那么
就更新这个节点的距离,并将其加入优先队列
如果队列中仍有节点
04
回到步骤2。否则,算法结束
算法步骤
这个算法的时间复杂度是O((E+V)logV),其中 E是边的数量,V是节点的数量
这是因为每个节点和每条边都需要被处理和比 较,而这个过程是在一个优先队列中进行的,
需要O(logV)的时间复杂度
优点和缺点
优点和缺点
迪杰斯特拉算 法的优点在于 它可以在大多 数情况下找到 最短路径,而 且实现起来相 对简单

最短路径问题的求解PPT精选文档

最短路径问题的求解PPT精选文档
这种算法最关键的问题就是如何确定估价函数,估价函数越准,则能 越快找到答案。这种算法实现起来并不难,只不过难在找准估价函数,大 家可以自已找相关资料学习和思考。
.
3
最短路径问题的求解
三、等代价搜索法 等代价搜索法也是在宽度优先搜索的基础上进行了部分优化的一种算法,它与
启发式搜索的相似之处都是每次只展开某一个结点(不是展开所有结点),不同之 处在于:它不需要去另找专门的估价函数,而是以该结点到A点的距离作为估价值, 也就是说,等代价搜索法是启发式搜索的一种简化版本。它的大体思路是:
.
2
最短路径问题的求解
二、 启发式搜索 在宽度优先搜索算法的基础上,每次并不是把所有可展开的结点展开,
而是对所有没有展开的结点,利用一个自己确定的估价函数对所有没展开 的结点进行估价,从而找出最应该被展开的结点(也就是说我们要找的答 案最有可能是从该结点展开),而把该结点展开,直到找到目标结点为止。
.
12
最短路径问题的求解
八、Dijkstra算法(从一个顶点到其余各顶点的最短路径,单源最短路径) 例3、如下图,假设C1,C2,C3,C4,C5,C6是六座城市,他们之间的连线表示两 城市间有道路相通,连线旁的数字表示路程。请编写一程序,找出C1到Ci 的最短路径(2≤i≤6),输出路径序列及最短路径的路程长度。
3、由数轴可见,A与A'点相比,A点离原点近,因而保留A点,删除A'点,相应的,B、B'点保留B点, D、D'保留D',E、E'保留E',得到下图:
.
11
最短路径问题的求解
4、此时再以离原点最近的未展开的点B联接的所有点,处理后,再展开离原点最近未展开的D点, 处理后得到如下图的最终结果:

dijkstra最短路径算法

dijkstra最短路径算法

图解迪杰斯特拉(Dijkstra)最短路径算法目录前言一、最短路径的概念及应用二、Dijkstra迪杰斯特拉1.什么是Dijkstra2.逻辑实现总结前言无论是什么程序都要和数据打交道,一个好的程序员会选择更优的数据结构来更好的解决问题,因此数据结构的重要性不言而喻。

数据结构的学习本质上是让我们能见到很多前辈在解决一些要求时间和空间的难点问题上设计出的一系列解决方法,我们可以在今后借鉴这些方法,也可以根据这些方法在遇到具体的新问题时提出自己的解决方法。

(所以各种定义等字眼就不用过度深究啦,每个人的表达方式不一样而已),在此以下的所有代码都是仅供参考,并不是唯一的答案,只要逻辑上能行的通,写出来的代码能达到相同的结果,并且在复杂度上差不多,就行了。

一、最短路径的概念及应用在介绍最短路径之前我们首先要明白两个概念:什么是源点,什么是终点?在一条路径中,起始的第一个节点叫做源点;终点:在一条路径中,最后一个的节点叫做终点;注意!源点和终点都只是相对于一条路径而言,每一条路径都会有相同或者不相同的源点和终点。

而最短路径这个词不用过多解释,就是其字面意思:在图中,对于非带权无向图而言,从源点到终点边最少的路径(也就是BFS广度优先的方法);而对于带权图而言,从源点到终点权值之和最少的路径叫最短路径;最短路径应用:道路规划;我们最关心的就是如何用代码去实现寻找最短路径,通过实现最短路径有两种算法:Dijkstra迪杰斯特拉算法和Floyd弗洛伊德算法,接下来我会详细讲解Dijkstra迪杰斯特拉算法;二、Dijkstra迪杰斯特拉1.什么是DijkstraDijkstra迪杰斯特拉是一种处理单源点的最短路径算法,就是说求从某一个节点到其他所有节点的最短路径就是Dijkstra;2.逻辑实现在Dijkstra中,我们需要引入一个辅助变量D(遇到解决不了的问题就加变量[_doge]),这个D我们把它设置为数组,数组里每一个数据表示当前所找到的从源点V开始到每一个节点Vi的最短路径长度,如果V到Vi有弧,那么就是每一个数据存储的就是弧的权值之和,否则就是无穷大;我们还需要两个数组P和Final,它们分别表示:源点到Vi的走过的路径向量,和当前已经求得的从源点到Vi的最短路径(也就是作为一个标记表示该节点已经加入到最短路径中了);那么对于如下这个带权无向图而言,我们应该如何去找到从V0到V8的最短路径呢;在上文中我们已经描述过了,在从V0到V8的这一条最短路径中,V0自然是源点,而V8自然是终点;于是我根据上文的描述具现化出如下的表格;在辅助向量D中,与源点V0有边的就填入边的权值,没边就是无穷大;构建了D、P和Final,那么我们要开始遍历V0,找V0的所有边中权值最短的的边,把它在D、P、Final中更新;具体是什么意识呢?在上述带权无向图中,我们可以得到与源点有关的边有(V0,V1)和(V0,V2),它们的权值分别是1和5,那么我们要找到的权值最短的的边,就是权值为1 的(V0,V1),所以把Final[1]置1,表示这个边已经加入到最短路径之中了;而原本从V0到V2的距离是5,现在找到了一条更短的从V0 -> V1 -> V2距离为4,所以D[2]更新为4,P[2]更新为1,表示源点到V2经过了V1的中转;继续遍历,找到从V0出发,路径最短并且final的值为0的节点。

迪杰斯特拉算法计算最短路径

迪杰斯特拉算法计算最短路径

利用Dijkstra算法计算最短路径摘要福格环游地球问题是一个十分典型的最短路径求解问题,题设给出了当时世界上主要交通网络图及交通通畅的城市之间来往所需时长,并限定了福格的出行方向(福格选择的是往东走),给出起止地点后要求找出福格环游世界天数最短的最佳路径。

我们认为,这个问题的实质在于最短路径的求解和优化。

我们对比图论中的多种最短路径算法,决定利用Dijkstra算法解决这个问题。

由于Dijkstra算法要求输入图G的关联矩阵,且图G为二维赋权图,而题中给出的地图可看成是三维环状地图,因此,我们对题设地图做相关处理,将其从起点处“切断”并展开为二维图,然后根据此图建立关联矩阵。

同时,我们考虑到最短路径可能会与切断线有交点,在切断线以西找出若干地点一分为二,修改关联矩阵。

对于题目中缺失的两处数据,本文将以当时的交通数据为基础,经过合理的数据处理,结合Google Earth测距软件与题目数据的合理类比,补充缺失数据,完成关联矩阵。

得到关联矩阵后,我们分别以伦敦、纽约和上海作为起点,调整关联矩阵起点和终点,用matlab编程进行求解得到最短环游时间和最短路径,进而判断出所选择的路径是否能让他赢得赌注。

根据我们的求解结果,在这三个城市,福格均能在80天内环游地球,赢得赌注。

本文进一步对此种算法的优缺点、灵敏度与推广性进行了分析,同时初步提出了两种优化方法。

关键词:最短路径算法 dijkstra算法算法优化一、问题重述儒勒•凡尔纳的著名小说《环游世界80天》中,英国绅士福格在伦敦与人打赌能够在80天内环游世界,这在当时的1872年是一个了不起的壮举。

当时最快的旅行方式是火车和轮船,然而世界上大部分地区还是靠马车、大象、驴子或者步行来旅行。

下面是一个从伦敦环游世界不同路线的交通网络图,福格选择的是往东走,每段路线所需要的天数显示在图上(见附录一),旅行的时间基于1872年能采用的旅行方式以及距离。

我们将解决以下问题:1.我们将设计一个算法为福格选择一条最佳路径,即环游世界天数最短,并判断所选择的路径是否能让他赢得赌注。

求最短路径经典算法详解-迪杰斯特拉(Dijkstra)、弗洛伊德(Floyd)

求最短路径经典算法详解-迪杰斯特拉(Dijkstra)、弗洛伊德(Floyd)

求最短路径经典算法详解-迪杰斯特拉(Dijkstra)、弗洛伊德(Floyd)什么是“迪杰斯特拉(Dijkstra)”算法? 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家于1959 年提出的,因此⼜叫。

是从⼀个顶点到其余各顶点的算法。

迪杰斯特拉算法主要特点是以起始点为中⼼向外层层扩展,直到扩展到终点为⽌。

⽤来解决什么样的问题? 解决的是有权图中最短路径问题,给定带权有向图G=(V, E)和源点v∈V,求从v到G中其余各顶点的最短路径应⽤案例:1.计算机⽹络传输的问题:怎样找到⼀种最经济的⽅式,从⼀台计算机向⽹上所有其它计算机发送⼀条消息。

2.交通运输问题,⾛那条路径最优解决思路步骤 基本思想:设置⼀个集合S存放已经找到最短路径的顶点,S的初始状态只包含源点v,对vi∈V-S,假设从源点v到vi的有向边为最短路径。

以后每求得⼀条最短路径v, …, vk,就将vk加⼊集合S中,并将路径v, …, vk , vi与原来的假设相⽐较,取路径长度较⼩者为最短路径。

重复上述过程,直到集合V中全部顶点加⼊到集合S中。

设计数据结构 : 1、图的存储结构:带权的邻接矩阵存储结构。

2、数组dist[n]:每个分量dist[i]表⽰当前所找到的从始点v到终点vi的最短路径的长度。

初态为:若从v到vi有弧,则dist[i]为弧上权值;否则置dist[i]为∞。

3、数组path[n]:path[i]是⼀个字符串,表⽰当前所找到的从始点v到终点vi的最短路径。

初态为:若从v到vi有弧,则path[i]为vvi;否则置path[i]空串。

4、数组s[n]:存放源点和已经⽣成的终点,其初态为只有⼀个源点v。

详细步骤及相关说明迪杰斯特拉算法(详细)Dist :存储了当前起点到其余各顶点的最短路径长度Path :存储了起点到其余各顶点的路径Set:标记了哪些顶点已经被选⼊了最短路径说明:+:表⽰起点到顶点没有直接相连-1:当前顶点在其最短路径上⾯没有前⼀个顶点或者没有关系初始状态0123456Dist0466+++Path-1000-1-1-1Set1000000从某个定点到其余各个顶点的最短路径选择距离起点最近的那个顶点,将其并⼊,然后扫描图中未被并⼊顶点的所有顶点。

最短路径问题 ppt课件

最短路径问题 ppt课件

12
图论及其应用 作业 用Dijkstra算法求出下图中从顶点a到其它所有 顶点的最短路径及及长度。
13
图论及其应用
有向图中求最短路径的Dijkstra算法
设Sj是带权有向图G中自顶点1到顶点j的最短有向路的长度 步骤1:置P={1},T={2,3,…,n}且S1=0,Sj=w1j, j=2,3,…,n 。 步骤2:在T中寻找一点k,使得Sk=min{Sj},置P=P{k}, T=T- {k}。若T=,终止;否则,转向步骤3。 步骤3:对T中每一点j,置Sj=min {Sj ,Sk+ wkj},然后转向步 骤2。 算法经过n-1 次循环结束。
6
1-6-8-B
6-8-B
13
10
5
图论及其应用
指定点到其它所有点的最短路径
解决这一问题最著名的方法是 Dijkstra算法,这个算法是由荷 兰计算机科学教授Edsger W.Dijkstra在1959年提出的。 他在1972年获得美国计算机协 会授予的图灵奖,这是计算机 科学中最具声望的奖项之一。
最终,起点上方的最短路线及权值即为起点到终点的最 短路线及长度。
3
图论及其应用
例 使用回溯法求下图中结点1到结点10的最短路径
2-6-9-10 600
1-4-6-9-10 650
4-6-9-10 500
6-9-10
300
9-10
100 5-8-10
400
8-10
150
3-5-8-10 600
7-8-10 275
定义2 已知矩阵A=(aij)m n ,B =(bij)mn,规定C=AB=(dij)mn,
其中dij=min(aij, bij)

迪杰斯特拉算法求最短路径图解

迪杰斯特拉算法求最短路径图解

迪杰斯特拉算法求最短路径图解
迪杰斯特拉算法是在用运筹学中解决路径搜索问题时候非常有用的一种算法。

它适用于求解从一个点到其他所有点的最短路径。

这种算法主要应用于交通网络,求解旅游问题,处理穿越桥梁或隧道的情况等等。

迪杰斯特拉算法的含义就是“最短路径”。

这种算法比较常见的一种,因为它
可以用于解决上述类型的问题,也能够给出即时的答案。

需要说明的是,运用迪杰斯特拉算法求解最短路径,需要满足一定的条件:必须满足图的邻接关系,并且确定用于求最短路径的起点和终点。

迪杰斯特拉的步骤可以分为四步:
第一步:先从所有节点中选择一个起始节点,找出该节点与其他节点之间的最
短路径;
第二步:选择一个未被访问的节点,计算从起始节点到该节点的最短路径长度;
第三步:在剩余节点中重复步骤二直至起始节点与所有节点均被访问;
第四步:当所有节点都被访问后,根据记录的信息,选择起始节点通往其他节
点的最短路径。

一旦经过这四步完成了最短路径的搜索,就可以使用迪杰斯特拉算法解决最短
路径问题了。

这种算法的特点在于它的有效性,准确性和便捷性,可以找出最短路径的最优解来解决问题,并且很容易实施。

解决最短路径问题时,使用该算法的一大优势在于可以考虑到不同的费用,这也就意味着可以计算具有很高效率的最短路径。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3
v5
v4
v1
3
v5
4 v4
3
v5
(a)
(b) 选择所有的边中权值最小的边
(c)
v2
v1
5
4 v4
3
v5
(d)
v1 4
v2 5
3 v4
(e)
v3 6 v5
求最短路径
• 求单源最短路径:Dijkstra(迪杰斯特拉)算法,时间复杂度O(n2) • 求全局最短路径:Floyd算法,时间复杂度O(n3)
图的存储与Dijkstra算法求最短路径
什么是图
图的分类
• 有向图 • 带权有向图 • 无权有向图
• 无向图 • 带权无向图 • 有权无向图
图的表示方法
• 邻接矩阵 • 邻接表 • 前向星
图的邻接矩阵表示法
• 对于有n个顶点的图,用一维数组vexs[n]存储顶点信息,用二维数组A[n][n] 存储顶点之间关系的信息。该二维数组称为邻接矩阵。在邻接矩阵中,以 顶点在vexs数组中的下标代表顶点,邻接矩阵中的元素A[i][ j]存放的是顶点 i到顶点j之间关系的信息。
继续从 D、E、F、H、I 中选择距源点A最近的点F(需排除前3轮已选择过的顶点B、C、G) 参照F更新源点A到 D、E、H、I 的路径长度
Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大) 第5步
源点A
B C D E FF G H I
初始值 参照B(A-->B) 参照C(A-(B)->C)
8
v1
5
4 v4
v2
7
12
v3
11
6
3 v5
v2 5 v4
v2
5
3
v4
v5
(a) 带权无向图如图所示
(b) 选择与v2相邻的边最小的顶点
(c)
v2
v1
5
4 v4
3 v5
(d)
v1 4
v2
5
3 v4
(e)
v3 6 v5
克鲁斯卡尔(Kruskal)算法求最小生成树的过程
8
v2
7
v1
5
12
v3
4
11
6
v4
(c) 邻接矩阵
图的邻接表表示法
链表中的结点称为表结点,每个结点由三个域组成,如图7-9(a)所示。其中 邻接点域(adjvex)指示与顶点Vi邻接的顶点在图中的位置(顶点编号),链域 (nextarc)指向下一个与顶点Vi邻接的表结点,数据域(info)存储和边或弧相关 的信息,如权值等。对于无权图,如果没有与边相关的其他信息,可省略此 域。每个链表设一个表头结点(称为顶点结点),由两个域组成,如图7-9(b)所 示。链域(firstarc)指向链表中的第一个结点,数据域(data) 存储顶点名或其 他信息。
源点A 初始值 参照B(A-->B) 参照C(A-(B)->C) 参照G(A-->G)
BCDE FGH I
3*** 64** 3 4 * * 6 4 10 *
3 4 12 *
5
4
10 13
3 4 12 * 5 4 8 13
AAAA-------->>>>GGGG-------->>>>IDHFE路路路路径径径径长长长长度度度度为为为为::::4444++++***4====***8((*(*(*>8>=><1=5131)*2)0)))
• 使用者两种算法的条件:要求必须是无环图
Dijkstra算法(求顶点A到其他顶点的最短距离)
算法思想如下: 1. 初始化源点A到其他顶点的距离,若其他顶点与源点A无直接相连
的边,则认为源点A到该顶点的距离为无穷大(程序中使用int或 long long的最大值表示无穷大); 2. 选择当前距离源点A最近的顶点X(注意:顶点X必须未被选择过); 3. 以X点为参照,更新源点A到其他未被选择过的点M的距离 若A->X->M小于A->M距离,则使用新距离替换原距离; 若A->X->M大于等于A->M距离,则保持原距离不变; 4. 重复步骤2、3,直到选取完所有的点为止。
有向无权图的邻接矩阵
a
b
e
c
d
(a) 有向图
vexs
a b c d e
(b) 顶点数组
01101 00000 0001 1 1100 0 0001 0
(c) 邻接矩阵
有向带权图的邻接矩阵
a 6 b3 2 3 45 e
c1 d
(a) 带权有向图
vexs
a b c d e
(b) 顶点数组
∞62 ∞∞ ∞ ∞∞ ∞ 3 ∞3∞1 ∞ ∞4∞∞5 ∞∞∞ ∞ ∞
图的最小生成树
如果连通图是一个带权图,则其生成树中的边也带权,生成树中所有边的权值之和称 为生成树的代价。最小生成树(Minimum Spanning Tree) :带权连通图中代价最小 的生成树称为最小生成树。
求最小生成树的算法
• 普里姆(Prim)算法 • 克鲁斯卡尔(Kruskal)算法
普里姆(Prim)算法求最小生成树的过程
参照F(A-(B、C)->F)
3 4 12 * 5 4 7 13
参照H(A-(B、C、F)->H)
3 4 10
*5
4
7 11
参照D(A-(B、C、F、H)->D)
3 4 10 15 5 4 7 11
参照I(A-(B、C、F、H)->I)
3 4 10 15 5 4 7 11
A-(B、C、F、H)->I-->E 路径长度为:11 + 4 = 15 (15 == 15)
Wij 若(vi , vj)E,即vi , vj邻接,权值为wij ∞ 若(vi , vj)E,即vi , vj不邻接时
a 6 b3 2 3 45 e
c1 d
(a) 带权无向图
vexs
a b c d e
(b) 顶点数组
∞62∞∞ 6∞34 3 2 3 ∞1 ∞ ∞ 4 3∞ 5 ∞ 3 ∞5 ∞
(c) 邻接矩阵
1. 继续从 C、D、E、F、G、H、I(需排除上一轮已被选择过的顶点B) 中选择距源点 A最近的点C
2. 以点C为参照更新源点A到 D、E、F、G、H、I 的路径长度 如果新路径长度小于原路径长度,则用新的长度作为A到该点的路径长度
3. 基于新的路径长度,重复步骤1、2。
Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大) 第3步
3*** 64** 3 4 * * 6 4 10 * 3 4 12 * 5 4 10 13
参照G(A-->G)
3 4 12 * 5 4 8 13
参照F(A-(B、C)->F)
3 4 12 * 5 4 7 13
参照H(A-(B、C、F)->H) 3 4 10
*5
4
7 11
AAA--(-(BB(B、、、CC、C、、FF)F)--)>->>HHH---->->>DEI 路路路径径径长长长度度度为为为:::777 +++ 3*4===*110(1*((=110=1 <<*)1123))
B C D E FF G H I 3*** 64** 3 4 * * 6 4 10 * 3 4 12 * 5 4 10 13 3 4 12 * 5 4 8 13 3 4 12 * 5 4 7 13
AAA---(((BBB、、、CCC)))--->>>FFF------>>>DEHI 路路路路径径径径长长长长度度度度为为为为::::5555++++***2====***7(((***(7=>>=<113*28)))
3
4
10 15 5
4
7 11
AA--((BB、、CC、、FF、、HH))-->>DD---->>EI 路路径径长长度度为为::1100 ++ *5==*1(5* (>1511<) *)
继续从 D、E、I 中选择距源点A最近的点D(需排除前5轮已选择过的顶点B、C、F、G、H)
参照D更新源点A到 E、I 的路径长度
无向无权图的邻接矩阵表示
A[i][ j]=
1 若(vi , vj)E,即vi , vj邻接 0 若(vi , vj)E,即vi , vj不邻接
a
d
b
c
(a) 无向图
vexs
a b c d
(b) 顶点数组
0111 1011 1101 1110 (c) 邻接矩阵
无向带权图的邻接矩阵表示
A[i][ j]=
继续从 D、E、H、I 中选择距源点A最近的点H(需排除前4轮已选择过的顶点B、C、F、G) 参照H更新源点A到 D、E、I 的路径长度
Dijkstra算法(求A到其他顶点的最短距离,注:*表示无穷大) 第6步
源点A
B C D E FF G H I
初始值 参照B(A-->B) 参照C(A-(B)->C)
表结点: adjvex
info nextarc
顶点结点: data
图7-9 邻接链表结点结构
firstarc
无向无权图的邻接表表示法
0 v1
v4 v1
v5
v2
v3
1 v2 2 v3 3 v4 4 v5
┇┇
MAX_VEX-1
1
相关文档
最新文档