Logo

Graph Traversals

Jul 1, 2025

BFS finds shortest paths in unweighted graphs; DFS is useful for connectivity, topological sorts (with modifications).

from collections import deque
def bfs_shortest(adj, src, dest):
q = deque([src])
dist = {src:0}
while q:
u = q.popleft()
if u == dest: return dist[u]
for v in adj[u]:
if v not in dist:
dist[v] = dist[u] + 1
q.append(v)
return -1

Use BFS for minimum hops, DFS for exploring full components or recursion-based tasks. Sometimes good enough is actually good enough - especially for v1.