Bellman-Ford
•
Used to find the shortest path between vertices
in a directed graph
•
Can be used to detect negative cycles
•
Can work with negative edges
•
Does not work with negative cycles
Algorithm Steps
•
Loop for all vertices – 1
–
Loop for all edges
• If source vertex destination < source destination
– Update distance from source to destination
–
If no changes were made the outer loop can
terminate early
•
Check for negative cycles
–
For all edges (u, v), there is a negative cycle if…
• If the distance from the source to vertex u • Plus the weight of the edge (u,v)
Complexity
•
Can be done in O(VE) time
Example
A B
C D
1
3
4
6 -2
Edge List
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B A-C A-D B-A C-D D-B D-C
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 0 + 3 ∞ ∞
A-C A-D B-A C-D D-B D-C
Relax Edge A-B (A
A + |A-B|)
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞
A-C A-D B-A C-D D-B D-C
Relax Edge A-B (A
A + |A-B|)
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞
A-C 0 3 0 + 1 ∞ A-D
B-A C-D D-B D-C
Relax Edge A-C (A
A + |A-C|)
A B
C D
1
3
4
6 -2
2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞
A-C 0 3 1 ∞ A-D
B-A C-D D-B D-C
Relax Edge A-C (A
A + |A-C|)
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞
A-D 0 3 1 0 - 3
B-A C-D D-B D-C
Relax Edge A-D (A
A + |A-D|)
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞
A-D 0 3 1 -3
B-A C-D D-B D-C
Relax Edge A-D (A
A + |A-D|)
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞ A-D 0 3 1 -3
B-A 0 3 1 -3 C-D
D-B D-C
Relax Edge B-A (A
B + |B-A|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞ A-D 0 3 1 -3 B-A 0 3 1 -3
C-D 0 3 1 -3
D-B D-C
Relax Edge C-D (A
C + |C-D|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞ A-D 0 3 1 -3 B-A 0 3 1 -3 C-D 0 3 1 -3
D-B 0 3 1 -3 D-C
Relax Edge D-B (A
D + |D-B|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞ A-D 0 3 1 -3 B-A 0 3 1 -3 C-D 0 3 1 -3 D-B 0 3 1 -3 D-C
Relax Edge D-C (A
D + |D-C|)
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞ A-D 0 3 1 -3 B-A 0 3 1 -3 C-D 0 3 1 -3 D-B 0 3 1 -3
D-C 0 3 -3 + 2 -3
Relax Edge D-C (A
D +|D-C|)
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞ A-D 0 3 1 -3 B-A 0 3 1 -3 C-D 0 3 1 -3 D-B 0 3 1 -3
D-C 0 3 -1 -3
Relax Edge D-C (A
D + |D-C|)
A B
C D
1
3
4
6 -2
Iteration 1
A B C D
X 0 ∞ ∞ ∞
A-B 0 3 ∞ ∞ A-C 0 3 1 ∞ A-D 0 3 1 -3 B-A 0 3 1 -3 C-D 0 3 1 -3 D-B 0 3 1 -3 D-C 0 3 -1 -3
Iteration 1 Complete
A B
C D
1
3
4
6 -2
Iteration 2
A B C D
X 0 3 -1 -3
A-B A-C A-D B-A C-D D-B D-C
A B
C D
1
3
4
6 -2
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C
A-D B-A C-D D-B D-C
Relax Edge A-B (A
A + |A-B|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3
A-C 0 3 -1 -3 A-D
B-A C-D D-B D-C
Relax Edge A-C (A
A + |A-C|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C 0 3 -1 -3
A-D 0 3 -1 -3
B-A C-D D-B D-C
Relax Edge A-D (A
A + |A-D|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C 0 3 -1 -3 A-D 0 3 -1 -3
B-A 0 3 -1 -3 C-D
D-B D-C
Relax Edge B-A (A
B + |B-A|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C 0 3 -1 -3 A-D 0 3 -1 -3 B-A 0 3 -1 -3
C-D 0 3 -1 -3
D-B D-C
Relax Edge C-D (A
C + |C-D|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C 0 3 -1 -3 A-D 0 3 -1 -3 B-A 0 3 -1 -3 C-D 0 3 -1 -3 D-B 0 3 -1 -3 D-C
Relax Edge D-B (A
D + |D-B|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C 0 3 -1 -3 A-D 0 3 -1 -3 B-A 0 3 -1 -3 C-D 0 3 -1 -3 D-B 0 3 -1 -3 D-C 0 3 -1 -3
Relax Edge D-C (A
D + |D-C|)
A B
C D
1
3
4
6 -2
2 -3
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C 0 3 -1 -3 A-D 0 3 -1 -3 B-A 0 3 -1 -3 C-D 0 3 -1 -3 D-B 0 3 -1 -3 D-C 0 3 -1 -3
Iteration 2 Complete
A B
C D
1
3
4
6 -2
Iteration 2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C 0 3 -1 -3 A-D 0 3 -1 -3 B-A 0 3 -1 -3 C-D 0 3 -1 -3 D-B 0 3 -1 -3 D-C 0 3 -1 -3
No Changes in Iteration 2
Algorithm Part 1 Complete
A B
C D
1
3
4
6 -2
A B C D
X 0 3 -1 -3
A-B 0 3 -1 -3 A-C 0 3 -1 -3 A-D 0 3 -1 -3 B-A 0 3 -1 -3 C-D 0 3 -1 -3 D-B 0 3 -1 -3 D-C 0 3 -1 -3
A B
C D
1
3
4
6 -2
A B C D
A-B 0 3 -1 -3
A B
C D
1
3
4
6 -2
2 -3
Check For Negative Cycles
A
A
+
|A-B|
>
A
B
A B C D
A-C 0 3 -1 -3
A B
C D
1
3
4
6 -2
2 -3
Check For Negative Cycles
A
A
+
|A-C|
>
A
C
A B C D
A-D 0 3 -1 -3
A B
C D
1
3
4
6 -2
2 -3
Check For Negative Cycles
A
A
+
|A-D|
>
A
D
A B C D
B-A 0 3 -1 -3
A B
C D
1
3
4
6 -2
2 -3
Check For Negative Cycles
A
B
+
|B-A|
>
A
A
A B C D
C-D 1 3 -1 -3
A B
C D
1
3
4
6 -2
2 -3
Check For Negative Cycles
A
C
+
|C-D|
>
A
D
A B C D
D-B 1 3 -1 -3
A B
C D
1
3
4
6 -2
2 -3
Check For Negative Cycles
A
D
+
|D-B|
>
A
B
A B C D
D-C 1 3 -1 -3
A B
C D
1
3
4
6 -2
2 -3
Check For Negative Cycles
A
D
+
|D-C|
>
A
C
No Negative Cycles
•
For all edges (u, v)