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 (topological sort by in-degree)
▸1build graph; edge b → a for prereq [a, b]2in-deg[v] = number of edges into v3queue = all v with in-deg[v] == 04processed = 05while queue not empty:6 u = pop; processed += 17 for u → v: in-deg[v] -= 1; if 0: push v8return processed == numCourses // all drained = DAG
state
- numCourses4
- answer?= is it a DAG