Q21: Course Schedule (Topological Sort / Cycle Detection)
Determine if you can finish all courses given prerequisite pairs using Topological Sort / Kahn's Algorithm (In-degree array + BFS).
Kahn's Algorithm BFS Topological Sort
function canFinish(numCourses, prerequisites) {
const inDegree = new Array(numCourses).fill(0);
const adjList = new Map();
for (let [course, pre] of prerequisites) {
if (!adjList.has(pre)) adjList.set(pre, []);
adjList.get(pre).push(course);
inDegree[course]++;
}
const queue = [];
for (let i = 0; i < numCourses; i++) {
if (inDegree[i] === 0) queue.push(i);
}
let processedCount = 0;
while (queue.length > 0) {
const current = queue.shift();
processedCount++;
const neighbors = adjList.get(current) || [];
for (let neighbor of neighbors) {
inDegree[neighbor]--;
if (inDegree[neighbor] === 0) queue.push(neighbor);
}
}
return processedCount === numCourses;
}
console.log(canFinish(2, [[1, 0]])); // true💡 Calculates in-degree counts for each node. Courses with 0 prerequisites enter the BFS queue. Decrements in-degrees of dependent courses as completed; returns true if all courses can be processed.
Key Takeaways
- If a directed graph contains a cycle, topological sorting is impossible.
- Kahn's algorithm tracks in-degrees of nodes to identify valid task processing order.
Knowledge Check
What condition indicates that prerequisites contain a cyclic dependency loop?