📖 Scenario: You are working on a navigation system that needs to find the shortest path from a starting city to all other cities. Some roads have toll discounts, which means the cost can be negative. You will use the Bellman Ford algorithm to handle these negative weights safely.
🎯 Goal: Build a program that uses the Bellman Ford algorithm to find the shortest distances from a starting city to all other cities, even when some roads have negative costs.
📋 What You'll Learn
Create a list of edges representing roads with start city, end city, and cost
Set up a distance list to store shortest distances from the start city
Implement the Bellman Ford algorithm to update distances
Print the final shortest distances from the start city to all other cities
💡 Why This Matters
🌍 Real World
Navigation systems and routing software often need to find shortest paths even when some roads have discounts or penalties, which can be represented as negative weights.
💼 Career
Understanding Bellman Ford algorithm is important for roles in software engineering, especially in fields like logistics, network routing, and game development where pathfinding with negative weights is required.
Progress0 / 4 steps
1
Create the graph edges
Create a list called edges with these exact tuples representing roads: (0, 1, 5), (1, 2, 20), (1, 5, 30), (5, 3, -15), (3, 2, -10), (2, 4, 75)
DSA Python
Hint
Use a list of tuples where each tuple has three numbers: start city, end city, and cost.
2
Initialize distances
Create a list called distances with 6 elements, all set to float('inf'), then set distances[0] to 0 because city 0 is the start city
DSA Python
Hint
Use float('inf') to represent unknown distances and set the start city distance to 0.
3
Implement Bellman Ford algorithm
Write a for loop that runs 5 times, and inside it use a for loop over edges with variables u, v, w. Update distances[v] to distances[u] + w if it is smaller than the current distances[v]
DSA Python
Hint
Relax all edges 5 times to find shortest paths, checking if the new path is shorter before updating.
4
Print shortest distances
Write print(distances) to display the final shortest distances from city 0 to all other cities
DSA Python
Hint
Print the distances list to see the shortest path costs from city 0.
Practice
(1/5)
1. What is the main purpose of the Bellman-Ford algorithm when dealing with graphs that have negative edge weights?
easy
A. To sort vertices in topological order
B. To find the longest path in a graph
C. To detect cycles in an undirected graph
D. To find the shortest path from a single source to all vertices, even with negative weights
Solution
Step 1: Understand Bellman-Ford's goal
The Bellman-Ford algorithm is designed to find shortest paths from one source vertex to all other vertices in a graph, even if some edges have negative weights.
Step 2: Compare with other algorithms
Unlike Dijkstra's algorithm, Bellman-Ford can handle negative weights and also detect negative weight cycles.
Final Answer:
To find the shortest path from a single source to all vertices, even with negative weights -> Option D
Quick Check:
Bellman-Ford finds shortest paths with negative weights [OK]
Hint: Bellman-Ford handles negative edges for shortest paths [OK]
Common Mistakes:
Confusing Bellman-Ford with Dijkstra's algorithm
Thinking it finds longest paths
Assuming it only detects cycles
2. Which of the following is the correct way to initialize the distance array in Bellman-Ford algorithm in Python for a graph with vertices numbered 0 to n-1 and source vertex src?
easy
A. dist = [float('inf')] * n; dist[src] = 0
B. dist = [0] * n; dist[src] = float('inf')
C. dist = [null] * n; dist[src] = 0
D. dist = [float('inf')] * n; dist[0] = 0
Solution
Step 1: Initialize distances to infinity
We set all distances to infinity to represent unknown paths initially.
Step 2: Set source distance to zero
The distance from the source vertex to itself is zero, so dist[src] = 0.
Hint: Set all distances to infinity, source to zero [OK]
Common Mistakes:
Setting all distances to zero
Setting source distance to infinity
Using null instead of infinity
3. What will be the output distances array after running Bellman-Ford on the following graph with source vertex 0?
Edges: [(0,1,4), (0,2,5), (1,2,-3), (2,3,4)]
4. Consider the following code snippet for Bellman-Ford. What is the error?
def bellman_ford(n, edges, src):
dist = [float('inf')] * n
dist[src] = 0
for _ in range(n):
for u, v, w in edges:
if dist[u] + w < dist[v]:
dist[v] = dist[u] + w
return dist
medium
A. The outer loop should run n-1 times, not n times
B. The distance initialization is incorrect
C. The edge relaxation condition is wrong
D. The function does not return the path, only distances
Solution
Step 1: Check loop iterations
Bellman-Ford requires relaxing edges exactly n-1 times to guarantee shortest paths.
Step 2: Identify the error
The code runs the outer loop n times, which is one extra iteration and can cause incorrect detection of negative cycles or unnecessary work.
Final Answer:
The outer loop should run n-1 times, not n times -> Option A
Quick Check:
Outer loop runs n-1 times [OK]
Hint: Relax edges exactly n-1 times [OK]
Common Mistakes:
Running outer loop n times instead of n-1
Misinitializing distances
Confusing relaxation condition
5. Given a graph with edges [(0,1,1), (1,2,-1), (2,0,-1)], what will Bellman-Ford detect when run from source 0, and why?
hard
A. It will return infinite distances for all vertices
B. It will detect a negative weight cycle because the cycle sum is negative
C. It will raise an error due to invalid edges
D. It will find shortest paths without issues
Solution
Step 1: Calculate cycle weight sum
The cycle is 0->1->2->0 with weights 1 + (-1) + (-1) = -1, which is negative.
Step 2: Understand Bellman-Ford behavior
Bellman-Ford detects negative weight cycles by checking for further relaxation after n-1 iterations.
Step 3: Conclusion
Since the cycle sum is negative, Bellman-Ford will detect this negative weight cycle.
Final Answer:
It will detect a negative weight cycle because the cycle sum is negative -> Option B
Quick Check:
Negative cycle sum triggers detection [OK]
Hint: Negative cycle sum means Bellman-Ford detects cycle [OK]
Common Mistakes:
Assuming no negative cycles exist
Thinking algorithm crashes on negative cycles
Confusing cycle detection with path finding
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.