def dfs(graph, start, visited=None, result=None):
if visited is None:
visited = set()
if result is None:
result = []
visited.add(start)
result.append(start)
for neighbor in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited, result)
return result
def dfs_cycle_detection_for_directed_graphs(n, graph):
def dfs(node):
visited[node] = True
recursion_stack[node] = True
for neighbor in graph[node]:
if visited[neighbor] == False:
if dfs(neighbor):
return True
elif recursion_stack[neighbor] == True:
return True
recursion_stack[node] = False
return False
visited = [False] * n
recursion_stack = [False] * n
for node in range(n):
if visited[node] == False:
if dfs(node):
return True
return False
Where V is vertices and E is edges
$Time = O(V + E)$