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 efficiently select the next node with the smallest tentative distance?
A priority queue (often implemented as a min-heap) is used to quickly pick the node with the smallest current distance estimate.
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 get shorter. Negative edges can create shorter paths after visiting nodes, breaking this assumption.
Click to reveal answer
advanced
What is the time complexity of Dijkstra's Algorithm using a priority queue 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
beginner
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 and priority queue.
Click to reveal answer
What type of graph edge weights can Dijkstra's Algorithm handle?
Which data structure helps Dijkstra's Algorithm efficiently pick the next node to process?
AQueue
BPriority Queue
CStack
DLinked List
✗ Incorrect
A priority queue allows selecting the node with the smallest tentative distance quickly.
What happens during the relaxation step in Dijkstra's Algorithm?
AWe update the shortest distance to a neighbor if a shorter path is found
BWe remove the node from the graph
CWe add new nodes to the graph
DWe reset all distances to infinity
✗ Incorrect
Relaxation updates the distance to neighbors if a shorter path through the current node is found.
What is the initial distance to the source node in Dijkstra's Algorithm?
AZero
BInfinity
COne
DNegative one
✗ Incorrect
The source node distance is set to zero because the distance from the source to itself is zero.
Which of these is NOT a step in Dijkstra's Algorithm?
AInitialize all distances to infinity except source
BUse a priority queue to select the next node
CRelax edges to update distances
DUse depth-first search to explore nodes
✗ Incorrect
Dijkstra's Algorithm does not use depth-first search; it uses a priority queue to pick nodes.
Describe how Dijkstra's Algorithm finds the shortest path from a source node to all other nodes in a graph.
Think about starting with the source and gradually improving distance estimates.
You got /5 concepts.
Explain why Dijkstra's Algorithm cannot be used with graphs that have negative edge weights.
Consider what happens if a path gets shorter after visiting nodes.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of Dijkstra's Algorithm in graph theory?
easy
A. To sort vertices in topological order
B. To find the maximum flow in a network
C. To detect cycles in a graph
D. To find the shortest path from a single source to all other vertices
Solution
Step 1: Understand the algorithm's goal
Dijkstra's Algorithm is designed to find the shortest distances from one starting point (source) to every other point in a graph with non-negative edge weights.
Step 2: Compare with other graph algorithms
Other algorithms like max flow or cycle detection serve different purposes, so they do not match Dijkstra's goal.
Final Answer:
To find the shortest path from a single source to all other vertices -> Option D
Quick Check:
Dijkstra's Algorithm = shortest paths from source [OK]
Hint: Remember: Dijkstra finds shortest paths from one source [OK]
Common Mistakes:
Confusing Dijkstra with algorithms for max flow
Thinking it detects cycles
Assuming it sorts vertices
2. Which of the following is the correct way to initialize the distance array in Dijkstra's Algorithm in C++?
easy
A. vector<int> dist(n, -1); dist[source] = 0;
B. vector<int> dist(n, INT_MAX); dist[source] = 0;
C. vector<int> dist(n, 0); dist[source] = INT_MAX;
D. vector<int> dist(n); dist[source] = 0;
Solution
Step 1: Understand distance initialization
Distances to all nodes except the source should start as infinity (or a very large number) to represent unknown distance.
Step 2: Check each option
vector<int> dist(n, INT_MAX); dist[source] = 0; correctly sets all distances to INT_MAX and source distance to 0. Others either set wrong initial values or leave uninitialized.
Final Answer:
vector<int> dist(n, INT_MAX); dist[source] = 0; -> Option B
Quick Check:
Distance array initialized with INT_MAX except source = 0 [OK]
Hint: Initialize all distances to max except source zero [OK]
Common Mistakes:
Setting all distances to zero initially
Not setting source distance to zero
Leaving distance array uninitialized
3. Consider the following graph edges and weights:
If we run Dijkstra's Algorithm from source vertex 0, what is the shortest distance array after completion?
medium
A. [0, 3, 1, 4]
B. [0, 4, 1, 6]
C. [0, 2, 1, 3]
D. [0, 5, 1, 7]
Solution
Step 1: Initialize distances
Start with dist = [0, INF, INF, INF]. Source 0 distance is 0.
Step 2: Relax edges step-by-step
From 0: dist[1] = 4, dist[2] = 1. From 2: dist[1] = min(4, 1+2=3) = 3, dist[3] = 1+5=6. From 1: dist[3] = min(6, 3+1=4) = 4.
Final Answer:
[0, 3, 1, 4] -> Option A
Quick Check:
Shortest distances from 0 = [0,3,1,4] [OK]
Hint: Update distances by relaxing edges with minimum sums [OK]
Common Mistakes:
Not updating distance to vertex 1 via vertex 2
Incorrectly summing edge weights
Ignoring better paths found later
4. The following C++ code snippet for Dijkstra's Algorithm has a bug. What is the error?
vector<int> dist(n, INT_MAX);
dist[source] = 0;
priority_queue> pq;
pq.push({0, source});
while(!pq.empty()) {
int u = pq.top().second;
int d = pq.top().first;
pq.pop();
if(d > dist[u]) continue;
for(auto &edge : graph[u]) {
int v = edge.first;
int w = edge.second;
if(dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
pq.push({dist[v], v});
}
}
}
medium
A. priority_queue is max-heap by default (needs negative distances or greater comparator)
B. Distance array is not initialized correctly
C. The graph adjacency list is not iterated properly
D. The source distance is not set to zero
Solution
Step 1: Check priority queue usage
In C++, priority_queue by default is max-heap. To get min-heap behavior for distances, distances should be pushed as negative or use greater comparator.
Step 2: Identify the bug
The code pushes distances as positive values, so the smallest distance won't be on top, causing incorrect behavior.
Final Answer:
priority_queue is max-heap by default (needs negative distances or greater comparator) -> Option A
Quick Check:
Use negative distances or min-heap for correct priority queue [OK]
Hint: Use negative distances or min-heap to get smallest distance first [OK]
Common Mistakes:
Ignoring priority queue ordering behavior
Not setting source distance to zero
Incorrect graph iteration
5. You have a weighted graph with 5 vertices and edges:
From 0: dist[1]=10, dist[4]=5. From 4: dist[1]=min(10,5+3=8)=8, dist[2]=min(INF,5+9=14)=14, dist[3]=min(INF,5+2=7)=7. From 1: dist[2]=min(14,8+1=9)=9. From 2: dist[3]=min(7,9+4=13)=7.
Step 3: Final shortest distance to vertex 3
The shortest distance to vertex 3 is 7.
Final Answer:
7 -> Option C
Quick Check:
Shortest distance to vertex 3 = 7 [OK]
Hint: Relax edges in order, update distances with minimum sums [OK]
Common Mistakes:
Not updating distances via vertex 4
Ignoring better paths through intermediate vertices
Confusing edge weights
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.