https://leetcode.com/problems/course-schedule/
- Topological Sort
Build the prerequisite graph and use Kahn's algorithm to detect whether all courses can be completed.
O(V + E)
O(V + E)
import java.util.*;
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i < numCourses; i++) graph.add(new ArrayList<>());
int[] indegree = new int[numCourses];
for (int[] edge : prerequisites) {
graph.get(edge[1]).add(edge[0]);
indegree[edge[0]]++;
}
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < numCourses; i++) if (indegree[i] == 0) queue.offer(i);
int visited = 0;
while (!queue.isEmpty()) {
int course = queue.poll();
visited++;
for (int next : graph.get(course)) {
if (--indegree[next] == 0) queue.offer(next);
}
}
return visited == numCourses;
}
}