数学建模社区-数学中国

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

作者: 2744557306    时间: 2023-8-5 15:09
标题: 最短路径dijkstra算法
最短路径
当图为带权图时,把一个从顶点V0到图中任意顶点的路径所经过边的权值之和,定义为该路径的带权长度,把带权路径长度最短的那条路径称为最短路径。
对于最短路径有下面两种说法:1 L! }6 }5 j" t% g5 {8 Z! A8 g
! d5 _0 e% M( ~; x3 Z  y6 [9 |& `
在最短路径中遇到不同的问题我们应该用那种方法呢?具体方法如下图所示:
) V; M9 \) D' I$ j( h- F# `/ j" v0 F
首先我们来看最短路径dijkstra算法,他是寻找单源最短路径的。我们需要3个数组final[5],dist[5],path[5]。具体含义如下所示:其中最短路径长度是v0到该节点的最短路径
. _6 x7 x$ O% P; }& m& M5 B9 H+ S- O, _( u
首先,我们从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
) ~) J- d! a% m" d6 s
由于图片上传有限制,图片都在附件中
; u2 j  t" Q: Q8 A6 h# c

- L: Y7 b5 ]( G$ q$ r

最短路径djkstral.docx

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


作者: 旺旺碎冰冰    时间: 2023-9-1 22:07
谢谢分享
( S0 a: a- w3 D9 a) h( V) f




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