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 void setVertex(String[] vertex) {
this.vertex = vertex;
}
public int getVerNum() {
return verNum;
}
public Edge[

本文介绍了Bellman-Ford算法,用于在带权有向图中寻找单源最短路径。算法包括初始化所有顶点距离为无穷大,源顶点距离设为0,然后进行V-1次遍历更新最短路径,最后检查是否存在负权边构成的环。附带源码和测试用例。
最低0.47元/天 解锁文章
487

被折叠的 条评论
为什么被折叠?



