BFS finds shortest paths in unweighted graphs; DFS is useful for connectivity, topological sorts (with modifications).
from collections import dequedef 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.