Kahn's algorithm: process nodes with in-degree 0.
function canFinish(numCourses, prerequisites): graph = [[] for _ in range(numCourses)] inDegree = [0] * numCourses for a, b in prerequisites: graph[b].append(a) inDegree[a] += 1 queue = [i for i in range(numCourses) if inDegree[i] == 0] processed = 0 while queue: course = queue.pop(0) processed += 1 for neighbor in graph[course]: inDegree[neighbor] -= 1 if inDegree[neighbor] == 0: queue.append(neighbor) return processed == numCourses
time and space.