数学建模社区-数学中国
标题:
Dijkstra算法及实现(附代码)
[打印本页]
作者:
shengivp
时间:
2018-2-10 17:23
标题:
Dijkstra算法及实现(附代码)
$ c: c5 J. R9 [( ]6 u: l# _+ N% i
Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
9 L/ ~) p1 Q/ E' w5 U; v$ w
/ ^7 ^( N$ r/ ?( ]
Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。
" [0 r! l" j+ ^$ j5 c
5 n6 E, ~- u) O; O
Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式,Drew为了和下面要介绍的 A* 算法和 D* 算法表述一致,这里均采用OPEN,CLOSE表的方式。
R' S: X9 W6 \7 d- c1 M
- H' b, B7 Y* K7 ^" f
其采用的是贪心法的算法策略
' U& b0 n9 P$ |7 ~/ w
) C r1 Q+ N: ?
大概过程:
4 a* l7 n+ s2 ~, P% Q& U
- h* i+ B8 P; ?- U0 `: v
创建两个表,OPEN, CLOSE。
/ ?4 B! F( s( ]' b7 J; u
- y$ j. a0 \5 w6 | X
OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
# g* z+ z5 J5 }7 T3 j
/ t" S9 d3 m; D9 ~# G) M G3 ?5 D
1. 访问路网中距离起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。
4 W+ u2 t" R9 S @, \8 m+ A( w: r8 u7 a
0 u* Z6 b2 U! t& T6 @5 {( R$ j+ j
2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。
: c$ {) {1 \) m# U% { k
~+ A7 }; w" m6 N
3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。
1 f; F. c9 Q7 N/ r) k2 c2 `$ w5 d" g7 V
$ j! W( W5 w3 |# m% l. Z+ X
4. 重复第2和第3步,直到OPEN表为空,或找到目标点。
p" n T- k6 Y4 @
- d7 S# a5 L2 h+ S0 k* J2 b
源代码见附件!
# ]- v, B6 A+ N& V: S$ \
源代码见附件!
n! j9 J: f2 v
源代码见附件!
! k0 y: Z" m5 K8 S( h% Q( x: T
3 p/ g2 j' G Y+ V0 O+ R
" y; h d% i% k5 ]& W1 V, k& l
! |3 u* ]* e; h' f! O
# ?2 }5 S- I, V7 V5 y5 Y6 [2 f
! V$ K! k1 c4 t/ U6 W6 Z
+ R Q- N$ F1 Z2 c
3 ?" j% o& T' i6 O
dijk实现代码.txt
2018-2-10 17:22 上传
点击文件名下载附件
下载积分: 体力 -2 点
7.68 KB, 下载次数: 43, 下载积分: 体力 -2 点
作者:
2388589074
时间:
2018-2-21 12:16
okokokokok
$ @% [8 V$ c0 A4 ?6 E4 m1 `
作者:
1283170951
时间:
2018-6-3 11:12
发表回复谢谢休息休息
. @. Q* T9 u* ]0 T6 G
作者:
1359260642
时间:
2021-5-18 08:36
( u# J" \6 E4 ?
: f0 Z8 D! c7 K1 L0 Y) L
4 @+ t, u$ _% V& U) p5 h# r
请问这个使用matlab实现的吗?
( Z! g/ p/ B' n* n
作者:
1359260642
时间:
2021-5-18 08:39
如果需要改动是需要改哪里呢,抱歉,因为没有学过这个算法,想学习一下,但是有点看不明白
9 z6 [$ H( ?5 Q* z% ~
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5