Explain cycle detection.
Skip to solutionKEEP THE
hardDSA
How do you detect a cycle in a directed graph?
999 views
01
Understand the problem
graphscycle
02
Attempt it yourself
Sketch your approach before reading the solution — that's what interviews test.
Nudge consolestandby
Stuck? Beam a request up — the console returns a conceptual nudge that guides your logic without spoiling the implementation.
03
Study the solution
Run DFS tracking three states (unvisited, in-progress, done). If you reach a node that's currently 'in-progress' (in the recursion stack), there's a back edge → a cycle. Alternatively, Kahn's topological sort fails to process all nodes if a cycle exists. O(V+E).
Solution ready — 2 min read
Classified // press E to declassify
04
Read the code
DFS with 3 colors
Run Playgrounddef has_cycle(graph, n):
# 0 = unvisited, 1 = in-progress, 2 = done
state = [0] * n
def dfs(u):
state[u] = 1
for v in graph[u]:
if state[v] == 1: # back edge -> cycle
return True
if state[v] == 0 and dfs(v):
return True
state[u] = 2
return False
return any(state[i] == 0 and dfs(i) for i in range(n))
# --- demo ---
print(has_cycle([[1], [2], [0]], 3)) # True (0->1->2->0)
print(has_cycle([[1], [2], []], 3)) # False05
Join the discussion
Discussion (0)
Sign in to join the discussion.
No responses yet. Be the first to share what you think.
Transmission complete // awaiting log
KEEP THE
STREAK ALIVE.
Dossier 105 of 127 decoded in the Data Structures & Algorithms track. One more won't hurt.