Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法。
输入:带权图
输出:从第0个点到其他点的最短路径值
Bellman-Ford 算法描述:
- 创建源顶点 v 到图中所有顶点的距离的集合 distSet,为图中的所有顶点指定一个距离值,初始均为 Infinite,源顶点距离为 0;
- 计算最短路径,执行 V - 1 次遍历;
- 对于图中的每条边:如果起点 u 的距离 d 加上边的权值 w 小于终点 v 的距离 d,则更新终点 v 的距离值 d;
- 检测图中是否有负权边形成了环,遍历图中的所有边,计算 u 至 v 的距离,如果对于 v 存在更小的距离,则说明存在环
源码如下:
/*
带权值图的一种表示方法:顶点与和向边数组
*/
public class DigraphVEW {
String[] vertex;//所有顶点的数组,存放顶点的名字
int verNum;//顶点个数
Edge[] edgds;//所有带权边的数组
public DigraphVEW(String[] vertex, Edge[] edgds) {
this.vertex = vertex;
this.verNum = vertex.length;
this.edgds = edgds;
}
public String[] getVertex() {
return vertex;
}
public vo