数学建模社区-数学中国

标题: 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. H1 {  F3 _2 R! }4 R
Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。
8 @- e. B' ?7 |/ G7 S
; ^& d  Z- ~/ E0 x+ xDijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用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' |% DOPEN表保存所有已生成而未考察的节点,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 U2. 从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 X4. 重复第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( p5 E0 }( C4 d0 j. q4 o9 N, T4 x

8 f2 J% ?. j$ L6 q- U, f1 m9 C' a2 z  ?6 I$ A% P8 ^

7 y' L+ n; G1 N) s4 S7 H

dijk实现代码.txt

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