File tree 1 file changed +11
-12
lines changed
1 file changed +11
-12
lines changed Original file line number Diff line number Diff line change 1
- #单源最短路径
2
- ##介绍
1
+ # 单源最短路径
2
+ ## 介绍
3
3
给定一个带权有向图G(V,E)=Vertex(顶点集合)+Edge(边集合),其中每条边的权是一个实数。另外,还给定一个顶点称为源。现在要计算从源到其他所有各顶点的最短路径长度。这里的长度就是指路上各边权之和。这个问题通常称为单源最短路径问题。
4
4
5
- ##有向图
5
+ ## 有向图
6
6
是指一个有序三元组为关联函数.
7
7
8
- ##三元组
8
+ ## 三元组
9
9
三元组表:主要是用来存储稀疏矩阵的一种压缩方式,假设以顺序存储结构来表示三元组表,则得到稀疏矩阵的一种压缩存储方式,即三元组顺序表,如下图
10
10
11
11
12
12
![ ] ( ../../res/Drawable/DrawableShortPath/3.jpg )
13
13
14
14
15
- ##环路
15
+ ## 环路
16
16
![ ] ( ../../res/Drawable/DrawableShortPath/1565936309510.jpg )
17
17
18
18
22
22
所以,最小路径中是不包含环路的
23
23
24
24
25
- ##松驰操作
25
+ ## 松驰操作
26
26
27
27
对边集合 E 中任意边,以 w(u,v) 表示顶点 u 出发到顶点 v 的边的权值,以 d[ v] 表示当前从起点 s 到顶点 v 的路径权值,初始把d[ v] 设置为无限大,并设置任意节点的前驱节点为空。
28
28
35
35
s. d = 0 ;
36
36
}
37
37
38
- ```
38
+ ```
39
39
40
40
若存在边 w(u,v),使得:
41
41
42
42
d[v] > d[u]+w(u,v)
43
43
44
44
则更新 d[ v] 值:
45
45
46
-
46
+
47
47
``` java
48
48
public void relax(Vertex u, Vertex v, int w){
49
49
if (v. d > u. d + w) {
52
52
}
53
53
}
54
54
55
- ```
56
-
55
+ ```
56
+
57
57
就是比较当前节点和前驱节点。如果前驱节点 d 加上边的权重值少于本节点的 d 值,则更新本节点 d 值。
58
58
59
59
60
- ##求单源最短路径算法
60
+ ## 求单源最短路径算法
61
61
Bellman-Ford算法将对每一条边进行松弛操作,共进行 v-1 次;本算法将会返回一个布尔值,布尔值的作用是判断该图中是否存在负权回路,若该布尔值为true则存在负权回路,那么问题无解,否则问题有解。
62
62
63
63
64
64
65
65
66
66
67
67
68
-
You can’t perform that action at this time.
0 commit comments