CodingNeed.

Engineering practice · 30 MIN

Order jobs and detect dependency cycles

A topological order exists only for a directed acyclic graph.

Kahn’s algorithm starts with jobs whose indegree is zero. Remove one job, decrement its dependants, and enqueue each newly ready job. A cycle leaves some jobs unprocessed. Our deterministic contract seeds the queue in job-index order and visits outgoing edges in input order. A cursor over an array avoids repeatedly shifting its contents.

Treat the function as a small service: define a contract, maintain an invariant, and test the boundaries.

Read the example

const ready = [0, 2];
let head = 0;
while (head < ready.length) console.log(ready[head++]);
Check the expected output
0
2

Your challenge

Input {count, edges}: jobs are 0..count-1 and each unique edge [before,after] requires before first. Return the Kahn queue order, or [] if a cycle exists. Seed zero-indegree jobs in ascending order and process outgoing edges in input order.

Solution cost: O(V + E) time · O(V + E) space

Common trap

Array(count).fill([]) shares one array among every node. Use Array.from with a factory.

Further reading: Princeton: directed graphs

Next lesson: Preserve outcomes across asynchronous failures →

Essential cookies keep your account signed in. Optional analytics is not configured on this site. Your choice does not affect access to lessons.

Read the Privacy Policy. You can change this choice in the footer.