0
0
DSA Typescriptprogramming~20 mins

Cycle Detection in Directed Graph in DSA Typescript - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Cycle Detection Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of cycle detection using DFS
What is the output of the following TypeScript code that detects a cycle in a directed graph using DFS?
DSA Typescript
function hasCycle(graph: Map<number, number[]>): boolean {
  const visited = new Set<number>();
  const recStack = new Set<number>();

  function dfs(node: number): boolean {
    if (!visited.has(node)) {
      visited.add(node);
      recStack.add(node);

      for (const neighbor of graph.get(node) || []) {
        if (!visited.has(neighbor) && dfs(neighbor)) {
          return true;
        } else if (recStack.has(neighbor)) {
          return true;
        }
      }
    }
    recStack.delete(node);
    return false;
  }

  for (const node of graph.keys()) {
    if (dfs(node)) {
      return true;
    }
  }
  return false;
}

const graph = new Map<number, number[]>([
  [1, [2]],
  [2, [3]],
  [3, [4]],
  [4, [2]]
]);

console.log(hasCycle(graph));
Atrue
Bfalse
Cundefined
DSyntaxError
Attempts:
2 left
💡 Hint
Think about whether the graph has a back edge that forms a cycle.
Predict Output
intermediate
2:00remaining
Output of cycle detection with no cycles
What is the output of the following TypeScript code that checks for cycles in a directed graph with no cycles?
DSA Typescript
function detectCycle(graph: Map<number, number[]>): boolean {
  const visited = new Set<number>();
  const recStack = new Set<number>();

  function dfs(node: number): boolean {
    if (!visited.has(node)) {
      visited.add(node);
      recStack.add(node);

      for (const neighbor of graph.get(node) || []) {
        if (!visited.has(neighbor) && dfs(neighbor)) {
          return true;
        } else if (recStack.has(neighbor)) {
          return true;
        }
      }
    }
    recStack.delete(node);
    return false;
  }

  for (const node of graph.keys()) {
    if (dfs(node)) {
      return true;
    }
  }
  return false;
}

const graph = new Map<number, number[]>([
  [1, [2]],
  [2, [3]],
  [3, [4]],
  [4, []]
]);

console.log(detectCycle(graph));
ATypeError
Btrue
Cnull
Dfalse
Attempts:
2 left
💡 Hint
Check if any node revisits a node in the current recursion stack.
🧠 Conceptual
advanced
1:30remaining
Understanding recursion stack in cycle detection
In cycle detection for a directed graph using DFS, what is the main purpose of the recursion stack (recStack)?
ATo keep track of all visited nodes globally
BTo store nodes that have no outgoing edges
CTo store nodes currently in the path of DFS to detect back edges
DTo count the total number of nodes in the graph
Attempts:
2 left
💡 Hint
Think about how cycles are detected during DFS traversal.
🔧 Debug
advanced
2:00remaining
Identify the error in cycle detection code
What error will the following TypeScript code produce when detecting cycles in a directed graph?
DSA Typescript
function checkCycle(graph: Map<number, number[]>): boolean {
  const visited = new Set<number>();
  const recStack = new Set<number>();

  function dfs(node: number): boolean {
    if (visited.has(node)) {
      return false;
    }
    visited.add(node);
    recStack.add(node);

    for (const neighbor of graph.get(node) || []) {
      if (!visited.has(neighbor) && dfs(neighbor)) {
        return true;
      } else if (recStack.has(neighbor)) {
        return true;
      }
    }
    recStack.delete(node);
    return false;
  }

  for (const node of graph.keys()) {
    if (dfs(node)) {
      return true;
    }
  }
  return false;
}

const graph = new Map<number, number[]>([
  [1, [2]],
  [2, [3]],
  [3, [1]]
]);

console.log(checkCycle(graph));
AThe code runs and outputs true
BThe code runs and outputs false
CStack overflow error due to infinite recursion
DTypeError due to undefined property access
Attempts:
2 left
💡 Hint
Check how visited nodes are handled in the DFS function.
🚀 Application
expert
3:00remaining
Number of cycles in a directed graph
Given the following directed graph represented as adjacency list, how many distinct cycles does it contain?
DSA Typescript
const graph = new Map<number, number[]>([
  [1, [2, 3]],
  [2, [4]],
  [3, [2]],
  [4, [1, 5]],
  [5, []]
]);
A2
B1
C3
D0
Attempts:
2 left
💡 Hint
Trace paths and look for cycles formed by back edges.