📖 Scenario: Imagine you are managing a city's road network. You want to find the shortest travel distance between every pair of intersections to help drivers choose the best routes.
🎯 Goal: You will build a program using the Floyd Warshall algorithm to find the shortest paths between all pairs of intersections in a road network represented by a distance matrix.
📋 What You'll Learn
Create a 2D array called dist representing the initial distances between intersections.
Create a variable V for the number of intersections.
Implement the Floyd Warshall algorithm using three nested for loops with variables k, i, and j.
Update dist[i][j] with the minimum distance using intermediate intersection k.
Print the final dist matrix showing shortest distances between all pairs.
💡 Why This Matters
🌍 Real World
City planners and GPS navigation systems use all pairs shortest path algorithms to find the best routes between locations.
💼 Career
Understanding Floyd Warshall helps in roles involving route optimization, network analysis, and algorithm design.
Progress0 / 4 steps
1
Create the initial distance matrix
Create a 2D array called dist with these exact values representing distances between 4 intersections: [[0, 5, 999, 10], [999, 0, 3, 999], [999, 999, 0, 1], [999, 999, 999, 0]] Use 999 to represent no direct path.
DSA Javascript
Hint
Use a constant named dist and assign the given 2D array exactly.
2
Set the number of intersections
Create a constant called V and set it to the number of intersections, which is 4.
DSA Javascript
Hint
Use const V = 4; to store the number of intersections.
3
Implement the Floyd Warshall algorithm
Use three nested for loops with variables k, i, and j from 0 to V. Inside the innermost loop, update dist[i][j] to the minimum of dist[i][j] and dist[i][k] + dist[k][j].
DSA Javascript
Hint
Use three nested loops and update dist[i][j] only if the new path is shorter.
4
Print the shortest distance matrix
Use console.log(dist) to print the final dist matrix showing shortest distances between all pairs of intersections.
DSA Javascript
Hint
Use console.log(dist) to print the updated distance matrix.
Practice
(1/5)
1. What is the main purpose of the Floyd Warshall algorithm in graph theory?
easy
A. To detect cycles in a graph
B. To find the shortest path from a single source to all other vertices
C. To find the shortest paths between all pairs of vertices in a weighted graph
D. To sort vertices in topological order
Solution
Step 1: Understand Floyd Warshall's goal
The Floyd Warshall algorithm calculates shortest paths between every pair of vertices in a weighted graph.
Step 2: Differentiate from other algorithms
Unlike Dijkstra's algorithm which finds shortest paths from one source, Floyd Warshall finds paths for all pairs.
Final Answer:
To find the shortest paths between all pairs of vertices in a weighted graph -> Option C
Quick Check:
All pairs shortest path = Floyd Warshall [OK]
Hint: Floyd Warshall finds shortest paths for all vertex pairs [OK]
Common Mistakes:
Confusing with Dijkstra's single source shortest path
Thinking it detects cycles
Assuming it sorts vertices
2. Which of the following is the correct way to initialize the distance matrix dist for Floyd Warshall in JavaScript given a graph adjacency matrix graph?
easy
A. const dist = graph.map(row => row.slice());
B. const dist = graph.slice();
C. const dist = graph.map(row => row);
D. const dist = [...graph];
Solution
Step 1: Understand deep copy necessity
We need a deep copy of the 2D array so changes to dist do not affect graph.
Step 2: Check each option for deep copy
const dist = graph.map(row => row.slice()); uses map and slice to copy each row array, creating a deep copy. Others create shallow copies.
Final Answer:
const dist = graph.map(row => row.slice()); -> Option A
Quick Check:
Deep copy with map and slice = const dist = graph.map(row => row.slice()); [OK]
Hint: Use map with slice for deep copy of 2D arrays [OK]
Common Mistakes:
Using shallow copy causing original graph to change
Using spread operator which copies only top-level array
Using map without slice copying references
3. What will be the output distance matrix after running Floyd Warshall on the following graph adjacency matrix where Infinity means no direct edge?
Hint: Check all intermediate vertices to update shortest paths [OK]
Common Mistakes:
Not updating paths through intermediate vertices
Confusing Infinity with zero
Missing updates for indirect paths
4. Identify the error in this Floyd Warshall implementation snippet:
for (let k = 0; k < V; k++) {
for (let i = 0; i < V; i++) {
for (let j = 0; j < V; j++) {
if (dist[i][k] + dist[k][j] < dist[i][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
medium
A. Missing check if dist[i][k] or dist[k][j] is Infinity before addition
B. The loops should be reversed: i, j, then k
C. No error, the code is correct
D. The condition should use <= instead of <
Solution
Step 1: Analyze addition of distances
Adding dist[i][k] + dist[k][j] without checking if either is Infinity can cause incorrect results or overflow.
Step 2: Identify missing Infinity checks
Before adding, must ensure dist[i][k] !== Infinity and dist[k][j] !== Infinity to avoid invalid sums.
Final Answer:
Missing check if dist[i][k] or dist[k][j] is Infinity before addition -> Option A
Quick Check:
Check Infinity before sum to avoid errors [OK]
Hint: Always check for Infinity before adding distances [OK]
Common Mistakes:
Ignoring Infinity causing wrong updates
Changing loop order unnecessarily
Using <= instead of < causing redundant updates
5. Given a weighted directed graph with possible negative edges but no negative cycles, how does Floyd Warshall detect the presence of a negative cycle after running the algorithm?
hard
A. By checking if any dist[i][j] is Infinity
B. By checking if any diagonal element dist[i][i] becomes negative
C. By verifying if the sum of all distances is zero
D. By checking if any dist[i][j] is negative for i != j
Solution
Step 1: Understand negative cycle effect on dist matrix
Negative cycles cause the shortest path from a vertex to itself to become negative.
Step 2: Check diagonal elements after Floyd Warshall
If any dist[i][i] < 0, it means a negative cycle exists involving vertex i.
Final Answer:
By checking if any diagonal element dist[i][i] becomes negative -> Option B
Quick Check:
Negative cycle detected if dist[i][i] < 0 [OK]
Hint: Check diagonal dist[i][i] for negativity to find negative cycles [OK]
Common Mistakes:
Checking off-diagonal elements for negative cycles
Confusing Infinity with negative cycles
Assuming sum of distances indicates cycles
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.