Depth-first search (DFS)
Applies to: general
DFS explores a graph by going as deep as possible before backtracking, using a stack (or recursion). It is the natural way to traverse trees, detect cycles, and explore all paths.
def dfs(node, seen):
seen.add(node)
for nb in neighbors(node):
if nb not in seen: dfs(nb, seen)