拓撲排序的作用:將有向圖的頂點排成一個線性序列
拓撲排序主要用來解決有向圖中的依賴解析(dependency resolution)問題
主要的思路就是找到入度爲0的結點。去除。將他的連着的子結點的入度都減一。然後重複這個過程。就得到了拓撲排序。
public class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
// 拓撲排序的一道題目
// 拓撲排序主要用來解決有向圖中的依賴解析(dependency resolution)問題
int[] indegree = new int[numCourses]; // 用來記錄各個結點的入度。
List<List<Integer>> list = new LinkedList<>();// 用來記錄,每個結點,指向的結點。
for (int i = 0; i < numCourses; i++) {
list.add(new LinkedList<>());
}
for (int[] prerequisite : prerequisites) {
indegree[prerequisite[0]]++;
list.get(prerequisite[1]).add(prerequisite[0]);
}
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < numCourses; i++) {
if (indegree[i] == 0) {
queue.add(i);
}
}
while (!queue.isEmpty()) {
int remove = queue.remove();
numCourses --;
for (int integer : list.get(remove)) {
indegree[integer]--;
if (indegree[integer] == 0) {
queue.add(integer);
}
}
}
return numCourses == 0;// 如果最後 numCourses 減到0了,說明,能夠學完這些課程。
}
}