Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Cycle Detection in Undirected Graph in DSA Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a cycle in an undirected graph?
A cycle is a path that starts and ends at the same vertex with no repeated edges or vertices (except the start/end vertex).
Click to reveal answer
beginner
Which data structure is commonly used to detect cycles in an undirected graph?
Depth-First Search (DFS) is commonly used to detect cycles by checking if a visited node is reached again through a different path.
Click to reveal answer
intermediate
In cycle detection using DFS, why do we keep track of the parent node?
We track the parent node to avoid falsely detecting a cycle when revisiting the immediate previous node during traversal.
Click to reveal answer
intermediate
What is the time complexity of cycle detection in an undirected graph using DFS?
The time complexity is O(V + E), where V is the number of vertices and E is the number of edges, because each vertex and edge is visited once.
Click to reveal answer
advanced
How does Union-Find (Disjoint Set) help in cycle detection in undirected graphs?
Union-Find keeps track of connected components. If two vertices of an edge belong to the same set, adding that edge creates a cycle.
Click to reveal answer
What does a cycle in an undirected graph mean?
AA path that starts and ends at the same vertex
BA path with no repeated vertices
CA path that visits all vertices exactly once
DA path that never revisits any vertex
Which traversal method is commonly used for cycle detection in undirected graphs?
ABreadth-First Search (BFS)
BTopological Sort
CDepth-First Search (DFS)
DDijkstra's Algorithm
Why do we track the parent node during DFS cycle detection?
ATo find the shortest path
BTo avoid counting the immediate previous node as a cycle
CTo mark nodes as visited
DTo count the number of edges
What is the time complexity of DFS-based cycle detection in an undirected graph?
AO(V^2)
BO(E^2)
CO(log V)
DO(V + E)
In Union-Find cycle detection, what indicates a cycle when adding an edge?
AThe edge connects two vertices in the same set
BThe edge connects two different sets
CThe edge connects a vertex to itself
DThe edge is the first edge added
Explain how Depth-First Search (DFS) can be used to detect a cycle in an undirected graph.
Think about revisiting nodes and how parent helps.
You got /4 concepts.
    Describe how the Union-Find data structure helps detect cycles in an undirected graph.
    Focus on connected components and root parents.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main idea behind detecting a cycle in an undirected graph using DFS?
      easy
      A. If we find a node with no neighbors, a cycle exists.
      B. If we visit a node that is already visited and is not the parent, a cycle exists.
      C. If the graph has more edges than nodes, it always has a cycle.
      D. If all nodes are visited exactly once, a cycle exists.

      Solution

      1. Step 1: Understand DFS traversal in undirected graph

        DFS visits nodes and tracks the parent node to avoid false cycle detection.
      2. Step 2: Detect cycle condition

        If during DFS, a visited node is found that is not the parent, it means a cycle exists.
      3. Final Answer:

        If we visit a node that is already visited and is not the parent, a cycle exists. -> Option B
      4. Quick Check:

        Cycle detection in undirected graph = check visited node not parent [OK]
      Hint: Check visited neighbors excluding parent to find cycles [OK]
      Common Mistakes:
      • Ignoring the parent node in cycle check
      • Assuming more edges than nodes always means cycle
      • Confusing cycle detection logic with directed graphs
      2. Which of the following is the correct way to represent an undirected graph adjacency list in JavaScript?
      easy
      A. const graph = {0: [1, 2], 1: [0, 3], 2: [0], 3: [1]};
      B. const graph = [[0,1], [1,2], [2,3]];
      C. const graph = {0: 1, 1: 2, 2: 3};
      D. const graph = [[1, 2], [0], [0], [1]];

      Solution

      1. Step 1: Understand adjacency list format

        An adjacency list maps each node to an array of its neighbors.
      2. Step 2: Check each option

        const graph = {0: [1, 2], 1: [0, 3], 2: [0], 3: [1]}; correctly maps nodes to arrays of neighbors. const graph = [[0,1], [1,2], [2,3]]; is edge list, not adjacency list. const graph = {0: 1, 1: 2, 2: 3}; maps nodes to single values, not arrays. const graph = [[1, 2], [0], [0], [1]]; is an array of arrays but connections are not symmetric (node 1 missing neighbor 3).
      3. Final Answer:

        const graph = {0: [1, 2], 1: [0, 3], 2: [0], 3: [1]}; -> Option A
      4. Quick Check:

        Adjacency list = node keys with neighbor arrays [OK]
      Hint: Adjacency list uses node keys with arrays of neighbors [OK]
      Common Mistakes:
      • Using edge list instead of adjacency list
      • Mapping nodes to single values, not arrays
      • Using arrays without keys for adjacency list
      3. What will be the output of the following code snippet detecting cycle in an undirected graph?
      const graph = {0: [1, 2], 1: [0, 3], 2: [0], 3: [1]};
      
      function dfs(node, parent, visited) {
        visited[node] = true;
        for (const neighbor of graph[node]) {
          if (!visited[neighbor]) {
            if (dfs(neighbor, node, visited)) return true;
          } else if (neighbor !== parent) {
            return true;
          }
        }
        return false;
      }
      
      const visited = {};
      const hasCycle = dfs(0, -1, visited);
      console.log(hasCycle);
      medium
      A. true
      B. undefined
      C. false
      D. TypeError

      Solution

      1. Step 1: Trace DFS calls and visited nodes

        Start at node 0, mark visited. Visit neighbors 1 and 2. Both lead to nodes without cycles.
      2. Step 2: Check for cycle condition

        No neighbor is visited again except parent, so no cycle detected. DFS returns false.
      3. Final Answer:

        false -> Option C
      4. Quick Check:

        No back edge found = false [OK]
      Hint: Cycle if visited neighbor not parent found during DFS [OK]
      Common Mistakes:
      • Confusing parent node with cycle neighbor
      • Assuming any visited node means cycle
      • Not initializing visited properly
      4. Find the bug in the following cycle detection code for an undirected graph:
      function dfs(node, parent, visited) {
        visited[node] = true;
        for (const neighbor of graph[node]) {
          if (!visited[neighbor]) {
            if (dfs(neighbor, node, visited)) return true;
          } else if (neighbor === parent) {
            return true;
          }
        }
        return false;
      }
      medium
      A. The function should return false inside the for loop.
      B. The visited array is not initialized before DFS call.
      C. The graph variable is not defined inside the function.
      D. The condition 'neighbor === parent' should be 'neighbor !== parent' to detect cycles.

      Solution

      1. Step 1: Analyze cycle detection condition

        The code returns true if neighbor equals parent, which is incorrect because parent is allowed to be visited.
      2. Step 2: Correct condition for cycle detection

        It should return true if neighbor is visited and neighbor is NOT the parent, indicating a cycle.
      3. Final Answer:

        The condition 'neighbor === parent' should be 'neighbor !== parent' to detect cycles. -> Option D
      4. Quick Check:

        Cycle if visited neighbor not parent [OK]
      Hint: Cycle check: visited neighbor must not be parent [OK]
      Common Mistakes:
      • Returning true when neighbor is parent
      • Not initializing visited before DFS
      • Returning false too early inside loop
      5. Given the undirected graph below, which edges form a cycle?
      const graph = {
        0: [1, 2],
        1: [0, 2, 3],
        2: [0, 1, 4],
        3: [1],
        4: [2]
      };
      Select the correct set of edges that create a cycle.
      hard
      A. Edges (0-1), (1-2), (2-0)
      B. Edges (1-3), (3-4), (4-2)
      C. Edges (0-2), (2-4), (4-3)
      D. Edges (0-1), (1-3), (3-0)

      Solution

      1. Step 1: Identify cycles by checking connected edges

        Edges (0-1), (1-2), and (2-0) connect nodes in a triangle, forming a cycle.
      2. Step 2: Verify other edges

        Edges involving nodes 3 and 4 do not form cycles as they are connected linearly.
      3. Final Answer:

        Edges (0-1), (1-2), (2-0) -> Option A
      4. Quick Check:

        Triangle edges form cycle [OK]
      Hint: Look for triangle or loop edges to find cycles [OK]
      Common Mistakes:
      • Assuming linear chains form cycles
      • Ignoring the triangle formed by nodes 0,1,2
      • Confusing edge directions in undirected graph
      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