Relax ALL the Edges: Bellman-Ford
Get to know the Bellman-Ford algorithm and its applications in solving the shortest paths problem.
We'll cover the following...
Understanding of Bellman-Ford algorithm
The simplest implementation of Ford’s generic shortest-path algorithm was first sketched by Alfonso Shimbel in 1954, described in more detail by Edward Moore in 1957, and independently rediscovered by Max Woodbury and George Dantzig in 1957, by Richard Bellman in 1958, and by George Minty in 1958. (Neither Woodbury and Dantzig nor Minty published their algorithms.) In full compliance with Stigler’s Law, the algorithm is almost universally known as Bellman-Ford, because Bellman explicitly used Ford’s 1956 formulation of relaxing edges, although some authors refer to Bellman-Kalaba and a few early sources refer to Bellman-Shimbel.
The images below show a complete run of Dijkstra’s algorithm on a graph with negative edges. At each iteration, bold edges indicate predecessors; shaded vertices are in the priority queue; and the bold vertex is the next to be scanned.
The Shimbel / Moore / Woodbury-Dantzig / Bellman-Ford / Kalaba / Minty / Brosh algorithm can be summarized in one line:
- Bellman-Ford: Relax ALL the tense edges, then recurse.
Algorithm
Implementation
Explanation
-
Lines 14–24: The code initializes the shortest path distances from the source vertex to all other vertices. The distance to all vertices is set to a large value (
INT_MAX), except for the source vertex, which has a distance of0. Thetensearray is also initialized totruefor the source vertex, since it has been updated during the first iteration of the algorithm. -
Lines 26–38: The code checks if there is at least one tense edge in the graph.
-
Lines 40–48: The
Relaxfunction updates the shortest distance to vertexvif a shorter path through vertexuis found. This function is called for each edge in the graph during each iteration of the algorithm. -
Lines 56–75: The code finds the shortest path from a source vertex to all other vertices in a weighted directed graph. It initializes the shortest path distances, relaxes the edges to update the shortest paths, and repeats this process until there are no more tense edges.
-
Lines 91–94: The code prints the shortest distances from the source vertex.
The following lemma is the key to proving both the correctness and efficiency of Bellman-Ford. For every vertex and non-negative integer , let denote the length of the shortest walk in from to , consisting of at most edges. In particular, and for all .
Lemma 1: For every vertex and non-negative integer , after iterations of the main loop of , we have .
Proof: The proof proceeds by induction on . The base case is trivial, so assume . Fix a vertex , and let be the shortest walk from to , consisting of at most edges (breaking ties arbitrarily). By definition, has length . There are two cases to consider.
- Suppose has no edges. Then, must be the trivial walk from to , so and . We set in , and can never increase, so we always have .
- Otherwise, let be the last edge of . The induction hypothesis implies that after iterations,