数学建模社区-数学中国

标题: 最短路径dijkstra算法 [打印本页]

作者: 2744557306    时间: 2023-8-5 15:09
标题: 最短路径dijkstra算法
最短路径
当图为带权图时,把一个从顶点V0到图中任意顶点的路径所经过边的权值之和,定义为该路径的带权长度,把带权路径长度最短的那条路径称为最短路径。
对于最短路径有下面两种说法:
5 O1 ^% s, T* f2 E% N$ k
0 v& j) T7 [0 A- e) Z- F
在最短路径中遇到不同的问题我们应该用那种方法呢?具体方法如下图所示:
9 D1 L- K7 [) _
首先我们来看最短路径dijkstra算法,他是寻找单源最短路径的。我们需要3个数组final[5],dist[5],path[5]。具体含义如下所示:其中最短路径长度是v0到该节点的最短路径
6 ]6 x+ S- M/ N( v0 B! i
% t. o- V2 f9 G. W7 q
首先,我们从v0开始,v0可以到v1v4。我们先把他们的路径长度提案先到最短路径长度上,并修改前驱,前驱为v0。此时的v1v4都没有找到最短路径,只有v0找到了到v0的最短距离,距离为0。在第一轮中循环遍历所有节点,找到没有确定最短路径且dist最小的顶点我们选取v4,说明找到了v0v4的最短路径,(如果不是最短路径他只能走v1那条路线,但是他已经超过了5,走v1路线一定不是最短的)
对其他finalfalse的节点进行更新,经过v4出去的节点有三个,将其全部更新,将v4到其他三个节点与v4记录中的最短路径相加,如果路径大于记录的路径长度则不用更新。最终更新结果如下图所示:
此时我们最短路径长度已经有两个确认了,寻找剩下的长度最小的V3,将v3final改为true,对v1v2的最短路径进行更新。其中v3指向的节点只有v2v3的最短路径为77+6=13<14。将v2节点的最短路径更改为13,且前去改为v3
之后再次寻找最小长度,为v1,将v1final改为true,从v1指出的阶段有v28+1=9<13.更新最后节点v2节点的最短路径,将其final改为true,更新其前驱为v1,结果如下:
可以观察到从v0v1的最短距离为8,到v2的最短距离为9v37v45。那么如何寻找路径呢?已知到v2的长度为9,我们寻找他的前驱,前驱为1v1的前驱为v4v4的前驱为v0,我们就可以得到它的最短路径了,v0 ->v4 ->v1->v2

6 h9 D5 }2 g! ^7 d! b
由于图片上传有限制,图片都在附件中

4 _# _; b. g0 F: H6 K+ }, B. j* T, u3 l( i8 J/ ~! d- r4 `' z/ a

最短路径djkstral.docx

855.07 KB, 下载次数: 0, 下载积分: 体力 -2 点


作者: 旺旺碎冰冰    时间: 2023-9-1 22:07
谢谢分享
' v; p  V. S) _/ u/ w, C




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5