Bird
Raised Fist0
DSA Cprogramming~5 mins

Cycle Detection in Directed Graph in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a cycle in a directed graph?
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
Which color represents a vertex that is currently being explored in the color method?
AGray
BWhite
CBlack
DBlue
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)
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
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
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

      1. 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.
      2. Step 2: Identify what cycle detection finds

        Cycle detection checks if such a path exists in the graph.
      3. Final Answer:

        Whether there is a path that starts and ends at the same node following edge directions -> Option A
      4. 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

      1. Step 1: Understand array declaration in C

        In C, to declare an array of size n, use int visited[n]; but it is uninitialized.
      2. Step 2: Initialize array to zero

        To initialize all elements to zero, use int visited[n] = {0}; which sets all to zero.
      3. Final Answer:

        int visited[n] = {0}; -> Option B
      4. 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

      1. Step 1: Analyze graph edges

        Graph edges: 0->1, 1->2, 2->0 form a cycle.
      2. 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".
      3. Final Answer:

        Cycle detected -> Option D
      4. 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

      1. Step 1: Understand cycle detection logic

        Cycle detection in directed graph needs to track nodes in current recursion path using a recursion stack.
      2. Step 2: Identify missing recursion stack

        This code only uses visited array, so it cannot distinguish back edges causing cycles from cross edges.
      3. Final Answer:

        Missing recursion stack to track nodes in current path -> Option C
      4. 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

      1. Step 1: Trace the graph edges

        Edges: 0->1, 1->2, 2->3 and 2->4, 3->1.
      2. Step 2: Identify cycle nodes

        Cycle is 1->2->3->1. Nodes 1, 2, 3 form the cycle.
      3. Final Answer:

        Nodes 1, 2, 3 -> Option A
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard