Graph Theory37 sections · 1633 units
Open in Course

Course Schedule II - Implementation

The code

function findOrder(numCourses, prerequisites):
    adj = empty adjacency list of size numCourses
    inDegree = array of size numCourses, all zeros

    for each [a, b] in prerequisites:
        adj[b].append(a)
        inDegree[a] += 1

    queue = empty queue
    for i from 0 to numCourses - 1:
        if inDegree[i] == 0:
            queue.push(i)

    result = []
    while queue is not empty:
        u = queue.pop()
        result.append(u)
        for each v in adj[u]:
            inDegree[v] -= 1
            if inDegree[v] == 0:
                queue.push(v)

    if result.length == numCourses:
        return result
    else:
        return [] // cycle detected

Time: O(V+E)O(V + E). Each node and edge is processed once.

Space: O(V+E)O(V + E). For the adjacency list, in-degree array, and queue.