图最短路径 Graph V2
单源最短路径
Dijkstra
给定带权有向图 G =(V,E)
,其中每条边的权是非负实数。另外,还给定 V
中的一个顶点,称为源。
- 单源最短路径:要计算从源到所有其他各顶点的各边权之和的最短长度
最小生成树
设 G=(V, E)
是连通无向带权图,V = {1, 2,..., n}
,即一个网络。E 中每条边 (v, w)
的权位 c[v][w]
。
-
生成树:如果
G
的子图G'
是一颗包含G
的所有顶点的树,则称G'
为G
的生成树。 -
最小生成树:生成树上各边权的总和称为该生成树的耗费。在
G
的所有生成树中,耗费最小的生成树称为G
的最小生成树。
构造 G 的最小生成树算法:
- Prim 避圈法
- Kruskai 破圈法
Prim 避圈法
-
首先初始化构造集
X={1}
-
然后,只要
X
是V
的真子集,就作如下的贪心选择选取权重最小的边(x,y)
,其中x ∈ X
,y ∈ Y
,-
将边
(x,y)
加入当前的最小生成树, -
将顶点
y
从Y
移到X
中,
-
-
这个过程一直进行到构造集
X=V
时为止。在这个过程中选取到的所有边恰好构成G
的一棵最小生成树。
Kruskai 破圈法
- 对
G
的边E
按权重以非降序排列 - 初始时输出树
T={}
依次取排序表中的每条边,若加入T
不形成回路,则加入T
否则将其丢弃; - 不断重复步骤 2,直到树
T
包含n-1
条边(即n
个节点),算法结束。