पाठ 18 / 26
Topological Sort
Order with dependencies.
Kahn's algorithm
A topological order lists nodes of a directed acyclic graph so every edge points forward: courses after their prerequisites, build steps after dependencies. Kahn's algorithm repeatedly takes nodes with in-degree zero, removing their outgoing edges. If some nodes are never processed, the graph has a cycle and no valid order exists. DFS with post-order is the alternative.
Ordering courses and detecting a cycle, run
I ran this with Python 3.12.3 (standard library only). Four courses get a valid order; two courses that require each other return an empty list.
# Topological sort (Kahn's algorithm): course prerequisites
from collections import deque
def course_order(n, prereqs):
graph, indeg = [[] for _ in range(n)], [0] * n
for course, pre in prereqs:
graph[pre].append(course)
indeg[course] += 1
q = deque(i for i in range(n) if indeg[i] == 0)
order = []
while q:
node = q.popleft()
order.append(node)
for nxt in graph[node]:
indeg[nxt] -= 1
if indeg[nxt] == 0:
q.append(nxt)
return order if len(order) == n else [] # empty: a cycle exists
print(course_order(4, [(1, 0), (2, 0), (3, 1), (3, 2)]))
print(course_order(2, [(1, 0), (0, 1)]))
Output:
[0, 1, 2, 3] []
Get the edge direction right
Decide clearly whether an edge means "prerequisite to course" or the reverse; mixing them is the common bug.
त्वरित जाँच: How does Kahn's algorithm detect a cycle?
- Not all nodes get processed because some never reach in-degree zero
- The queue overflows
- A node is visited twice
- The graph has more edges than nodes
Answer
Not all nodes get processed because some never reach in-degree zero — Cycles keep in-degrees positive.