A cycle in a directed graph is a path that starts and ends at the same vertex, following the direction of edges.
Click to reveal answer
beginner
Which data structures are commonly used to detect cycles in a directed graph?
Depth-First Search (DFS) with recursion stack or colors (white, gray, black) is commonly used to detect cycles in directed graphs.
Click to reveal answer
intermediate
What does the recursion stack represent in DFS cycle detection?
The recursion stack keeps track of vertices currently in the path of DFS. If a vertex is revisited while still in the recursion stack, a cycle exists.
Click to reveal answer
intermediate
Explain the color method for cycle detection in directed graphs.
Vertices are colored white (unvisited), gray (visited but not finished), or black (finished). Encountering a gray vertex during DFS means a cycle is detected.
Click to reveal answer
intermediate
Why can't we use simple visited arrays alone to detect cycles in directed graphs?
Because revisiting a vertex that is already visited but not in the current DFS path does not mean a cycle. We need to track the current path (recursion stack or colors) to detect cycles.
Click to reveal answer
What indicates a cycle during DFS in a directed graph?
AVisiting a vertex with only one incoming edge
BVisiting a vertex that is currently in the recursion stack
CVisiting a vertex with no outgoing edges
DVisiting a vertex that was visited in a previous DFS call
✗ Incorrect
A cycle is detected if DFS visits a vertex that is still in the recursion stack (current path).
Which color represents a vertex that is currently being explored in the color method?
AGray
BWhite
CBlack
DBlue
✗ Incorrect
Gray means the vertex is visited but DFS has not finished exploring all its descendants.
What is the time complexity of cycle detection using DFS in a directed graph with V vertices and E edges?
AO(V + E)
BO(V^2)
CO(E^2)
DO(V * E)
✗ Incorrect
DFS visits each vertex and edge once, so the time complexity is O(V + E).
If no cycle is found in a directed graph, what does that imply about the graph?
AThe graph is a tree
BThe graph is disconnected
CThe graph has no edges
DThe graph is acyclic
✗ Incorrect
No cycle means the graph is acyclic, also called a Directed Acyclic Graph (DAG).
Which of the following is NOT a valid method to detect cycles in a directed graph?
ADFS with recursion stack
BColor method with white, gray, black
CBreadth-First Search (BFS) with queue only
DTopological sort failure detection
✗ Incorrect
BFS alone cannot detect cycles in directed graphs without additional mechanisms.
Describe how DFS can be used to detect a cycle in a directed graph.
Think about how to know if a vertex is revisited in the current path.
You got /4 concepts.
Explain the difference between visited array and recursion stack in cycle detection.
Focus on why just knowing if a vertex was visited before is not enough.
You got /4 concepts.
Practice
(1/5)
1. What does cycle detection in a directed graph help us find?
easy
A. Whether there is a path that starts and ends at the same node following edge directions
B. The shortest path between two nodes
C. The total number of nodes in the graph
D. The maximum degree of any node
Solution
Step 1: Understand cycle in directed graph
A cycle means a path that starts and ends at the same node following the direction of edges.
Step 2: Identify what cycle detection finds
Cycle detection checks if such a path exists in the graph.
Final Answer:
Whether there is a path that starts and ends at the same node following edge directions -> Option A
Quick Check:
Cycle detection = path starting and ending at same node [OK]
Hint: Cycle means path loops back to start following edges [OK]
Common Mistakes:
Confusing cycle with shortest path
Thinking cycle ignores edge directions
Mixing cycle detection with counting nodes
2. Which of the following is the correct way to declare a visited array for cycle detection in C for a graph with n nodes?
easy
A. int visited = new int[n];
B. int visited[n] = {0};
C. int visited[] = {0};
D. int visited[n];
Solution
Step 1: Understand array declaration in C
In C, to declare an array of size n, use int visited[n]; but it is uninitialized.
Step 2: Initialize array to zero
To initialize all elements to zero, use int visited[n] = {0}; which sets all to zero.
Final Answer:
int visited[n] = {0}; -> Option B
Quick Check:
Array declaration with zero init = int visited[n] = {0}; [OK]
Hint: Use int arr[n] = {0} to initialize all zeros in C [OK]
Common Mistakes:
Using 'new' keyword which is C++ not C
Declaring array without size
Incorrect initialization syntax
3. Consider the following C code snippet for cycle detection in a directed graph using DFS. What will be the output?
void dfs(int node, int visited[], int recStack[], int graph[][3]) {
visited[node] = 1;
recStack[node] = 1;
for (int i = 0; i < 3; i++) {
int adj = graph[node][i];
if (adj == -1) continue;
if (!visited[adj]) dfs(adj, visited, recStack, graph);
else if (recStack[adj]) printf("Cycle detected\n");
}
recStack[node] = 0;
}
int main() {
int graph[3][3] = {{1, -1, -1}, {2, -1, -1}, {0, -1, -1}};
int visited[3] = {0}, recStack[3] = {0};
dfs(0, visited, recStack, graph);
return 0;
}
medium
A. No output
B. Infinite loop
C. Segmentation fault
D. Cycle detected
Solution
Step 1: Analyze graph edges
Graph edges: 0->1, 1->2, 2->0 form a cycle.
Step 2: Trace DFS calls and cycle detection
DFS visits 0, then 1, then 2. When 2 tries to visit 0 again which is in recursion stack, it prints "Cycle detected".
Final Answer:
Cycle detected -> Option D
Quick Check:
Cycle in graph triggers print "Cycle detected" [OK]
Hint: Cycle prints when node revisited in recursion stack [OK]
Common Mistakes:
Ignoring recursion stack for cycle detection
Assuming no output means no cycle
Confusing visited and recursion stack arrays
4. The following code attempts to detect a cycle in a directed graph but does not work correctly. What is the main error?
void dfs(int node, int visited[], int graph[][3]) {
visited[node] = 1;
for (int i = 0; i < 3; i++) {
int adj = graph[node][i];
if (adj == -1) continue;
if (!visited[adj]) dfs(adj, visited, graph);
else printf("Cycle detected\n");
}
}
int main() {
int graph[3][3] = {{1, -1, -1}, {2, -1, -1}, {0, -1, -1}};
int visited[3] = {0};
dfs(0, visited, graph);
return 0;
}
medium
A. Graph adjacency matrix is incorrect
B. Visited array is not initialized
C. Missing recursion stack to track nodes in current path
D. DFS function missing return type
Solution
Step 1: Understand cycle detection logic
Cycle detection in directed graph needs to track nodes in current recursion path using a recursion stack.
Step 2: Identify missing recursion stack
This code only uses visited array, so it cannot distinguish back edges causing cycles from cross edges.
Final Answer:
Missing recursion stack to track nodes in current path -> Option C
Quick Check:
Recursion stack needed for correct cycle detection [OK]
Hint: Use recursion stack to detect back edges in DFS [OK]
Common Mistakes:
Assuming visited array alone detects cycles
Ignoring need to track current DFS path
Confusing undirected and directed cycle detection
5. You have a directed graph represented as adjacency lists:
0: [1]
1: [2]
2: [3, 4]
3: [1]
4: []
Which nodes are part of a cycle detected by DFS cycle detection algorithm?
hard
A. Nodes 1, 2, 3
B. Nodes 0, 1, 4
C. Nodes 0, 2, 4
D. Nodes 3, 4
Solution
Step 1: Trace the graph edges
Edges: 0->1, 1->2, 2->3 and 2->4, 3->1.
Step 2: Identify cycle nodes
Cycle is 1->2->3->1. Nodes 1, 2, 3 form the cycle.
Final Answer:
Nodes 1, 2, 3 -> Option A
Quick Check:
Cycle nodes = 1, 2, 3 [OK]
Hint: Follow edges to find loops including nodes [OK]
Common Mistakes:
Including nodes not in cycle like 0 or 4
Missing node 3 in cycle
Confusing cycle with path
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.