一、图的基本概念
-
无向图的权重邻接矩阵
-
有向图的权重邻接矩阵
注:Inf 表示无穷大。
二、Dijkstra算法(迪杰斯特拉算法)
1.算法流程
- 选择起点start与终点end;
- 所有点除起点外加入未知集合,并将起点加入已知集合,即至标志位为真,意为已确定该点到源点的最短路径;
- 初始化计算,更新起点与其他各点的耗费dis(start,n);
- 在未知集合中,选择dis(start,n)中值最小的点x,将x加入已知集合。
- 对于剩余顶点中,计算dis(start,n)>dis(start,x)+dis(x,n)
若真则dis(start,n)=dis(start,x)+dis(x,n),此时start与n点路径经过x点。循环直至goal点加入已知列表,取得dis(start,goal)即为最短距离。
2.缺点
三、Bellman‐Ford算法(贝尔曼‐福特算法)
1.算法流程
- 初始化时将起点s到各个顶点v的距离dist(s->v)赋值为∞,dist(s->s)赋值为0
- 后续进行最多n-1次遍历操作,对所有的边进行松弛操作,假设:
所谓的松弛,以边ab为例,若dist(a)代表起点s到达a点所需要花费的总数,
dist(b)代表起点s到达b点所需要花费的总数,weight(ab)代表边ab的权重, 若存在:
(dist(a) +weight(ab)) < dist(b)
则说明存在到b的更短的路径,s->…->a->b,更新b点的总花费为(dist(a) +weight(ab)),父节点为a - 遍历都结束后,若再进行一次遍历,还能得到s到某些节点更短的路径的话,则说明存在负环路