Bellman-Ford算法是一种单源最短路径算法,主要解决了图中存在负权边的情况下,求解从起点到其他所有节点的最短路径问题。在|V-1|轮计算中,算法逐步松弛所有边(即对所有边进行松弛操作),找到起点到其他节点的最短路径。如果在第|V-1|轮仍然存在可以松弛的边,则说明图中存在负权回路,也即无法求解最短路径。
代码示例:
// 初始化距离数组dist和前驱节点数组prev for each vertex v in Graph: if v is source then dist[v] := 0 else dist[v] := infinity prev[v] := undefined
// 迭代|V-1|轮 for i from 1 to size(vertices)-1: for each edge (u, v, w) in Graph: if dist[u] + w < dist[v]: dist[v] := dist[u] + w prev[v] := u
// 检查负权回路 for each edge (u, v, w) in Graph: if dist[u] + w < dist[v]: error "图中存在负权回路"