最短路径算法
最短路径问题:给定有向图G=V,SA用n表示图G的顶点数n = V,用m表示图中的边数m = A,选中图中的一个顶点为源点s,对每条有向边i,j inA,给其一个权重值cij
- 从顶点s到顶点i的非空路径P是一个有向边序列:s,j1,j1,j2,…,jn,i,路径也表示为s→j1→j2→⋯→i
用cP表示路径P中的所有权重之和
若di表示所有s→i路径权重之和的最下值,则称路径为最短路径,若图中不存在s→i的路径,则置di为∞
- 若路径中没有重复的顶点,则称为简单路径
- 若路径起止于同一个顶点,则称之为回路
无负权边 Dijkstra算法
当所有边i,j∈A都有cij>0,可用dijkstra算法来求解最短路径
该算法对图中顶点保存一个距离标记d,di是最短s→i路径的距离预估数值,称为s→i路径的距离
伪代码
输入:G = V,A, ∀ij∈A,cij≥0,s∈A
输出:di和pi,∀i∈A
for all i∈V do di←∞,pi←null
ds←0
while所有顶点没有被标注完 do
在所有未标注的点选择i,使得di最小,并标注i
for j∈A && i,j∈A do
if dj>di+cij
dj=di+cij
pj←i
有负权边 Bellman-ford算法
负权回路的检测算法