Course Schedule (Topological Sort)
Problem: (LeetCode 207 - Course Schedule) There are numCourses courses labeled 0 to numCourses-1. Given prerequisite pairs [a, b] meaning you must take course b before course a, determine if it's possible to finish all courses.
Constraints: Up to 10^5 courses and prerequisite pairs.
Example: Input: numCourses=2, prerequisites=[[1,0]] Output: true (take course 0, then course 1) Input: numCourses=2, prerequisites=[[1,0],[0,1]] Output: false (cycle)
Approach: Model courses as a directed graph and detect whether it contains a cycle. Use topological sort via Kahn's algorithm (BFS): compute in-degree for each node, repeatedly remove zero-in-degree nodes and decrement neighbors' in-degrees; if all nodes are eventually removed, no cycle exists (true), otherwise a cycle remains (false). Alternatively use DFS with a recursion-stack visited set to directly detect back-edges (cycles). Runs in O(V+E).