To find the shortest path from a single starting point (source) to all other points (nodes) in a graph with non-negative edge weights.
Click to reveal answer
intermediate
In Dijkstra's Algorithm, what data structure is commonly used to select the next node with the smallest distance?
A priority queue (often implemented as a min-heap) is used to efficiently pick the node with the smallest current distance.
Click to reveal answer
intermediate
Why can't Dijkstra's Algorithm handle graphs with negative edge weights?
Because it assumes that once a node's shortest distance is found, it won't change. Negative edges can create shorter paths later, breaking this assumption.
Click to reveal answer
advanced
What is the time complexity of Dijkstra's Algorithm using a min-heap and adjacency list?
O((V + E) log V), where V is the number of vertices and E is the number of edges.
Click to reveal answer
intermediate
Explain the relaxation step in Dijkstra's Algorithm.
Relaxation means checking if the current known distance to a neighbor can be improved by going through the current node. If yes, update the neighbor's distance.
Click to reveal answer
What type of graph edges does Dijkstra's Algorithm require?
AOnly unweighted edges
BNon-negative edge weights
CNegative edge weights allowed
DEdges with zero weight only
✗ Incorrect
Dijkstra's Algorithm works correctly only if all edge weights are zero or positive.
Which data structure helps efficiently pick the next closest node in Dijkstra's Algorithm?
AStack
BQueue
CPriority Queue
DLinked List
✗ Incorrect
A priority queue allows quick access to the node with the smallest tentative distance.
What happens during the relaxation step?
AWe update the shortest distance to neighbors if a shorter path is found
BWe remove nodes from the graph
CWe add new edges to the graph
DWe reset all distances to infinity
✗ Incorrect
Relaxation updates the shortest known distances to neighbors if a better path is found.
What is the initial distance to the source node in Dijkstra's Algorithm?
ANegative one
BInfinity
COne
DZero
✗ Incorrect
The source node distance is zero because the distance from the source to itself is zero.
Which of these is NOT true about Dijkstra's Algorithm?
AIt works with negative edge weights
BIt updates distances through relaxation
CIt uses a priority queue for efficiency
DIt finds shortest paths from one source to all nodes
✗ Incorrect
Dijkstra's Algorithm does not work correctly with negative edge weights.
Describe the main steps of Dijkstra's Algorithm for finding shortest paths.
Think about how you keep track of shortest distances and update them.
You got /4 concepts.
Explain why Dijkstra's Algorithm cannot handle negative edge weights and what could happen if it tries.
Consider what happens if a shorter path appears after a node is finalized.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of Dijkstra's Algorithm in graph theory?
easy
A. To detect cycles in a graph
B. To find the minimum spanning tree of a graph
C. To find the shortest path from a single source to all other vertices
D. To sort the vertices in topological order
Solution
Step 1: Understand the algorithm's goal
Dijkstra's Algorithm is designed to find the shortest distance from one starting point (source) to every other point in a graph.
Step 2: Compare with other graph algorithms
Minimum spanning tree algorithms find a tree connecting all vertices with minimum total weight, cycle detection finds loops, and topological sort orders vertices. These are different tasks.
Final Answer:
To find the shortest path from a single source to all other vertices -> Option C
Quick Check:
Dijkstra's Algorithm = shortest paths from source [OK]
Hint: Dijkstra finds shortest paths from one start point [OK]
Common Mistakes:
Confusing shortest path with minimum spanning tree
Thinking it detects cycles
Mixing it with topological sorting
2. Which of the following TypeScript code snippets correctly initializes the distance array for Dijkstra's Algorithm for a graph with 5 vertices?
easy
A. const dist: number[] = Array(5).fill(Infinity); dist[0] = 0;
B. const dist: number[] = new Array(5).map(() => 0);
C. const dist: number[] = Array(5).fill(0); dist[0] = Infinity;
D. const dist: number[] = Array(5).fill(null); dist[0] = 0;
Solution
Step 1: Understand initialization requirements
Distances start as Infinity except the source vertex which is 0.
Step 2: Check each code snippet
const dist: number[] = Array(5).fill(Infinity); dist[0] = 0; correctly fills with Infinity and sets source distance to 0. const dist: number[] = new Array(5).map(() => 0); fills with 0 incorrectly. const dist: number[] = Array(5).fill(0); dist[0] = Infinity; fills with 0 and sets source to Infinity, wrong. const dist: number[] = Array(5).fill(null); dist[0] = 0; fills with null, which is invalid for numeric distances.
Hint: Fill array with Infinity, set source distance to 0 [OK]
Common Mistakes:
Using map on new Array without fill (returns undefined)
Setting all distances to 0 initially
Using null instead of numeric values
3. Given the following TypeScript code snippet implementing Dijkstra's Algorithm on a graph with edges: 0->1 (4), 0->2 (1), 2->1 (2), what is the final distance array after running from source vertex 0?
const graph = new Map>();
graph.set(0, [[1, 4], [2, 1]]);
graph.set(1, []);
graph.set(2, [[1, 2]]);
const dist = Array(3).fill(Infinity);
dist[0] = 0;
const visited = new Set<number>();
while (visited.size < 3) {
let u = -1;
let minDist = Infinity;
for (let i = 0; i < 3; i++) {
if (!visited.has(i) && dist[i] < minDist) {
minDist = dist[i];
u = i;
}
}
if (u === -1) break;
visited.add(u);
for (const [v, w] of graph.get(u) || []) {
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
}
}
}
console.log(dist);
medium
A. [0, 6, 1]
B. [0, 4, 1]
C. [Infinity, Infinity, Infinity]
D. [0, 3, 1]
Solution
Step 1: Initialize distances and start from source 0
dist = [0, Infinity, Infinity], visited = {}.
Step 2: Pick unvisited vertex with smallest dist and update neighbors
Hint: Update neighbors only if new path is shorter [OK]
Common Mistakes:
Not updating dist[1] from 4 to 3 via vertex 2
Picking wrong vertex with smallest distance
Ignoring visited set causing infinite loops
4. Identify the bug in the following TypeScript code snippet implementing Dijkstra's Algorithm:
const graph = new Map>();
graph.set(0, [[1, 7], [2, 9], [5, 14]]);
graph.set(1, [[2, 10], [3, 15]]);
graph.set(2, [[3, 11], [5, 2]]);
graph.set(3, [[4, 6]]);
graph.set(4, [[5, 9]]);
graph.set(5, []);
const dist: number[] = new Array(graph.size);
dist.fill(Infinity);
dist[0] = 0;
const visited = new Set<number>();
while (visited.size < graph.size) {
let u = -1;
let minDist = Infinity;
for (let i = 0; i < graph.size; i++) {
if (!visited.has(i) && dist[i] < minDist) {
minDist = dist[i];
u = i;
}
}
visited.add(u);
for (const [v, w] of graph.get(u) || []) {
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
}
}
}
medium
A. dist array is not initialized before use
B. Adding vertex u to visited set before checking if u is -1
C. Using graph.size instead of graph.length in loop
D. Not updating dist[u] inside the loop
Solution
Step 1: Analyze the selection of vertex u
If no unvisited vertex has finite dist, u remains -1.
Step 2: Check visited addition without validation
Code adds u to visited without checking if u === -1, which can cause adding -1 and errors.
Final Answer:
Adding vertex u to visited set before checking if u is -1 -> Option B
Quick Check:
Check u !== -1 before visited.add(u) [OK]
Hint: Always verify selected vertex is valid before marking visited [OK]
Common Mistakes:
Ignoring u === -1 case causing infinite loops
Confusing graph.size with array length
Not initializing dist array properly
5. You have a weighted graph with vertices 0 to 4 and edges: 0->1 (2), 0->2 (4), 1->2 (1), 1->3 (7), 2->4 (3), 3->4 (1). Using Dijkstra's Algorithm from source 0, what is the shortest path distance to vertex 4?
hard
A. 6
B. 7
C. 8
D. 9
Solution
Step 1: Calculate shortest distances step-by-step
Start dist: [0,∞,∞,∞,∞]
From 0: dist[1]=2, dist[2]=4
From 1: dist[2]=min(4,2+1=3)=3, dist[3]=2+7=9
From 2: dist[4]=3+3=6
From 3: dist[4]=min(6,9+1=10)=6
Step 2: Identify shortest distance to vertex 4
Shortest distance to vertex 4 is 6 via path 0->1->2->4.
Final Answer:
6 -> Option A
Quick Check:
Shortest path distance to 4 = 6 [OK]
Hint: Check all paths and pick minimum sum of edge weights [OK]
Common Mistakes:
Ignoring shorter path via vertex 2
Adding edges incorrectly
Assuming direct edge is always shortest
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.