prerequisite graph (b → a = take b first)
0
1
2
3
adjacency list
- 0:[1, 2]
- 1:[3]
- 2:[3]
- 3:[]
in-degree (prereqs left)
| course | in-deg | done |
|---|---|---|
| 0 | 0 | |
| 1 | 0 | |
| 2 | 0 | |
| 3 | 0 |
queue · in-degree 0
(empty)
Kahn's algorithm — collect the pop order
▸1build graph; edge b → a for prereq [a, b]2in-deg[v] = number of edges into v3queue = all v with in-deg[v] == 04order = []5while queue not empty:6 u = pop; order.append(u)7 for u → v: in-deg[v] -= 1; if 0: push v8return len(order) == numCourses ? order : []
state
- numCourses4
- goala valid topo order