Topological Sort
General Rules:
经典题目
public boolean canFinish(int numCourses, int[][] prerequisites) {
int[] indegrees = new int[numCourses];
for (int[] pair: prerequisites) {
indegrees[pair[0]]++;
}
Deque<Integer> queue = new LinkedList<>();
for (int i = 0; i < indegrees.length; i++) {
if (indegrees[i] == 0) {
queue.add(i);
}
}
int select = 0;
while (!queue.isEmpty()) {
int cur = queue.pollFirst();
select += 1;
for (int[] pair : prerequisites) {
if (pair[1] == cur) {
indegrees[pair[0]]--;
if (indegrees[pair[0]] == 0) {
queue.add(pair[0]);
}
}
}
}
return select == numCourses;
}Last updated