Logo

Topological Sort

Jul 29, 2025

Kahn’s algorithm: repeatedly remove nodes with indegree 0 and append to order.

from collections import deque
def topo(nodes, adj):
indeg = {n:0 for n in nodes}
for u in adj:
for v in adj[u]: indeg[v]+=1
q = deque([n for n in nodes if indeg[n]==0])
order = []
while q:
u = q.popleft(); order.append(u)
for v in adj.get(u,[]):
indeg[v]-=1
if indeg[v]==0: q.append(v)
return order if len(order)==len(nodes) else None # None => cycle

Use-case: build systems, dependency ordering.