数学建模社区-数学中国
标题:
Dijkstra算法及实现(附代码)
[打印本页]
作者:
shengivp
时间:
2018-2-10 17:23
标题:
Dijkstra算法及实现(附代码)
- u! k2 B2 @& {$ Q: e c
Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。
6 V% G/ x' }7 \! J6 k0 x: s. H
1 { F3 _2 R! }4 R
Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。
8 @- e. B' ?7 |/ G7 S
; ^& d Z- ~/ E0 x+ x
Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式,Drew为了和下面要介绍的 A* 算法和 D* 算法表述一致,这里均采用OPEN,CLOSE表的方式。
3 A6 C9 X' P5 `6 _
" L! H* x3 B' s# a" y1 P0 L
其采用的是贪心法的算法策略
* u: w4 e0 S6 A9 k c- N
0 ?7 q9 u0 o. X2 h; o
大概过程:
. N2 {" \( }7 z6 l, |
7 l7 u& A2 }+ I8 U
创建两个表,OPEN, CLOSE。
! L% y& A* K j7 G0 O! t
; ?! W7 p, P, ^( j' U- k' |% D
OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
) d3 l' j3 J% z G; Q2 k, ^& t7 Y
( s n9 p* f( Q% z! c6 ^
1. 访问路网中距离起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。
( [8 F, V& [6 L \) @. O/ l/ `
; I( g# O; O2 Y7 I9 U
2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。
, w% D/ T; N. H, H+ E- H
" W) h! z8 S) t6 y& P8 s3 I- ?
3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。
5 |" p2 k, D: w
0 `, }+ u% j0 f2 b8 X
4. 重复第2和第3步,直到OPEN表为空,或找到目标点。
6 T5 D, ]3 U$ }: P) F& E
1 g( k" ^% X5 C
源代码见附件!
! U. b% T/ p9 G
源代码见附件!
* W% V" u0 m1 ], P. @0 H9 ]
源代码见附件!
) [0 h6 P+ @" d3 u* }
! ?8 C1 g3 l1 {% t
+ L1 z6 l- K9 I' g
* G+ [9 d7 j# b5 I7 x4 e( p
5 E0 }( C4 d0 j. q4 o9 N, T4 x
8 f2 J% ?. j$ L6 q- U, f
1 m9 C' a2 z ?6 I$ A% P8 ^
7 y' L+ n; G1 N) s4 S7 H
dijk实现代码.txt
2018-2-10 17:22 上传
点击文件名下载附件
下载积分: 体力 -2 点
7.68 KB, 下载次数: 43, 下载积分: 体力 -2 点
作者:
2388589074
时间:
2018-2-21 12:16
okokokokok
. ~) l' V- }# z E2 I9 w
作者:
1283170951
时间:
2018-6-3 11:12
发表回复谢谢休息休息
$ l' t- s" q% I1 y! p9 h% J% E, ]
作者:
1359260642
时间:
2021-5-18 08:36
8 }' Z0 m4 r5 N; f, m- A4 q; V
; ]& V; q2 ]5 z8 y# K; Y) Y3 s
+ [" S5 C, q$ c6 z, T
请问这个使用matlab实现的吗?
& T4 H. A9 j7 I$ z0 s+ U
作者:
1359260642
时间:
2021-5-18 08:39
如果需要改动是需要改哪里呢,抱歉,因为没有学过这个算法,想学习一下,但是有点看不明白
6 B5 A! M* C! J' W/ r/ j
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5