What is the main idea behind Topological Sort using DFS?
We visit each node and explore all its neighbors first. After visiting all neighbors, we add the node to the result. This way, nodes appear after all nodes they depend on.
Click to reveal answer
beginner
What kind of graph can we apply Topological Sort to?
Topological Sort works only on Directed Acyclic Graphs (DAGs), which means the graph has directed edges and no cycles.
Click to reveal answer
beginner
In Topological Sort using DFS, when do we add a node to the sorted list?
We add a node to the sorted list only after all its neighbors (nodes it points to) have been visited and added.
Click to reveal answer
intermediate
Why do we use a stack or reverse the order of nodes after DFS in Topological Sort?
Because nodes are added after visiting neighbors, the order is reversed. Using a stack or reversing the list gives the correct topological order.
Click to reveal answer
intermediate
What happens if the graph contains a cycle when performing Topological Sort using DFS?
The algorithm cannot produce a valid topological order because cycles mean some nodes depend on each other in a loop. Detecting cycles is important to avoid incorrect results.
Click to reveal answer
Which graph type is required for Topological Sort using DFS?
ACyclic Directed Graph
BUndirected Graph
CDirected Acyclic Graph (DAG)
DAny Graph
✗ Incorrect
Topological Sort only works on Directed Acyclic Graphs (DAGs) because cycles prevent a valid ordering.
When do we add a node to the result list in DFS-based Topological Sort?
AAfter visiting all neighbors
BBefore visiting neighbors
CWhen the node is first discovered
DRandomly
✗ Incorrect
We add the node after visiting all its neighbors to ensure dependencies come first.
What data structure is commonly used to store the order during DFS Topological Sort?
AQueue
BLinked List
CHashSet
DStack
✗ Incorrect
A stack stores nodes in reverse order of completion, which is reversed later to get the topological order.
What does a cycle in the graph indicate during Topological Sort?
ANo valid topological order
BGraph is undirected
CValid ordering exists
DGraph is disconnected
✗ Incorrect
Cycles mean nodes depend on each other in a loop, so no valid order exists.
What is the time complexity of Topological Sort using DFS for a graph with V vertices and E edges?
AO(V^2)
BO(V + E)
CO(E^2)
DO(V * E)
✗ Incorrect
Each vertex and edge is visited once, so the time complexity is O(V + E).
Explain how Topological Sort using DFS works step-by-step.
Think about visiting neighbors before the node itself.
You got /5 concepts.
Describe how cycle detection is important in Topological Sort using DFS and how it can be done.
Consider marking nodes as visiting and visited.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of using DFS in Topological Sort on a directed graph?
easy
A. To find the shortest path between two nodes
B. To visit nodes in a way that all dependencies come before the node itself
C. To detect cycles in an undirected graph
D. To count the number of connected components
Solution
Step 1: Understand DFS role in Topological Sort
DFS visits nodes deeply, ensuring all nodes reachable from a node are visited before the node itself.
Step 2: Relate DFS order to dependencies
In Topological Sort, nodes must appear after all their dependencies, which DFS achieves by post-order traversal.
Final Answer:
To visit nodes in a way that all dependencies come before the node itself -> Option B
Quick Check:
DFS ensures dependency order [OK]
Hint: DFS post-order gives correct dependency order [OK]
Common Mistakes:
Confusing DFS with BFS for topological sorting
Thinking DFS finds shortest paths
Assuming DFS detects cycles in undirected graphs only
2. Which of the following C# code snippets correctly starts a DFS-based topological sort on all nodes in a graph represented as adjacency list Dictionary?
easy
A. for(int i=0; i
B. while(graph.Count > 0) DFS(graph.First().Key);
C. foreach(var node in graph.Keys) if(!visited[node]) DFS(node);
D. foreach(var node in graph.Values) DFS(node[0]);
Solution
Step 1: Identify correct iteration over nodes
We must iterate over all keys (nodes) and call DFS only if not visited.
Step 2: Check each option's correctness
foreach(var node in graph.Keys) if(!visited[node]) DFS(node); correctly iterates keys and checks visited. for(int i=0; i 0) DFS(graph.First().Key); modifies graph during iteration, unsafe. foreach(var node in graph.Values) DFS(node[0]); iterates values, not nodes.
Final Answer:
foreach(var node in graph.Keys) if(!visited[node]) DFS(node); -> Option C
Quick Check:
Iterate keys and check visited [OK]
Hint: Iterate graph keys, check visited before DFS [OK]
Common Mistakes:
Iterating over graph.Values instead of Keys
Assuming node indices are continuous from 0
Modifying collection during iteration
3. What is the output of the following C# code performing topological sort using DFS on the graph edges: 5->2, 5->0, 4->0, 4->1, 2->3, 3->1?
var graph = new Dictionary {
{5, new List<int>{2,0}},
{4, new List<int>{0,1}},
{2, new List<int>{3}},
{3, new List<int>{1}},
{0, new List<int>()},
{1, new List<int>()}
};
var visited = new HashSet<int>();
var stack = new Stack<int>();
void DFS(int node) {
visited.Add(node);
foreach(var n in graph[node]) {
if(!visited.Contains(n)) DFS(n);
}
stack.Push(node);
}
foreach(var node in graph.Keys) {
if(!visited.Contains(node)) DFS(node);
}
var result = stack.ToArray();
Console.WriteLine(string.Join(", ", result));
medium
A. 4, 5, 0, 2, 3, 1
B. 5, 4, 2, 3, 1, 0
C. 5, 4, 0, 1, 2, 3
D. 4, 5, 0, 1, 2, 3
Solution
Step 1: Perform DFS and track stack push order
Start DFS from 5: visit 2, then 3, then 1; push 1, 3, 2, then 0 from 5's other edge; push 5. Then DFS from 4: visit 0 and 1 already visited, push 4.
Step 2: Stack order and output
Stack push order is 1, 3, 2, 0, 5, 4. Converting stack to array reverses order: 4, 5, 0, 2, 3, 1.
Final Answer:
4, 5, 0, 2, 3, 1 -> Option A
Quick Check:
DFS post-order reversed = topological order [OK]
Hint: Stack reversed after DFS gives topological order [OK]
Common Mistakes:
Not reversing stack before output
Visiting nodes in wrong order
Ignoring nodes with no outgoing edges
4. The following C# DFS-based topological sort code throws a runtime error. What is the likely cause?
void DFS(int node) {
visited.Add(node);
foreach(var n in graph[node]) {
if(!visited.Contains(n)) DFS(n);
}
stack.Push(node);
}
foreach(var node in graph.Keys) {
DFS(node);
}
medium
A. No error; code runs correctly
B. NullReferenceException because graph is empty
C. Stack overflow due to infinite recursion from cycles
D. KeyNotFoundException because some nodes are missing in graph keys
Solution
Step 1: Analyze potential runtime errors in DFS
When recursing to a neighbor n not present as a key in the graph (common for sink nodes), accessing graph[n] throws KeyNotFoundException.
Step 2: Outer loop issue
Missing !visited check before DFS(node) causes duplicate stack pushes (logical error), not runtime error. Cycle detection needs separate recursion stack.
Final Answer:
KeyNotFoundException because some nodes are missing in graph keys -> Option D
Quick Check:
graph[n] for missing sink node key -> KeyNotFoundException [OK]
Hint: Include all nodes as keys with empty lists [OK]
Common Mistakes:
Omitting sink/leaf nodes from graph keys
Not initializing empty List<int>() for nodes with no outgoing edges
Assuming all edge targets are automatically graph keys
5. Given a directed acyclic graph (DAG) with nodes representing tasks and edges representing dependencies, how can you modify the DFS-based topological sort to detect if the graph contains a cycle?
hard
A. Use an additional recursion stack set to track nodes in the current DFS path and detect back edges
B. Count the number of nodes visited and compare with total nodes after DFS
C. Run BFS instead of DFS to detect cycles
D. Sort nodes by their degree before DFS
Solution
Step 1: Understand cycle detection in DFS
Use a recursion stack set to mark nodes currently in the DFS path. If a node is revisited while in this set, a cycle exists.
Step 2: Explain why other options fail
Counting visited nodes doesn't detect cycles. BFS alone doesn't detect cycles in directed graphs. Sorting by degree doesn't help detect cycles.
Final Answer:
Use an additional recursion stack set to track nodes in the current DFS path and detect back edges -> Option A
Quick Check:
Recursion stack detects cycles in DFS [OK]
Hint: Track recursion stack to find back edges indicating cycles [OK]
Common Mistakes:
Ignoring recursion stack for cycle detection
Assuming BFS detects cycles in directed graphs
Using node count to detect cycles
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.