leetcode210 拓扑排序:有向无环图的排序
/*关于拓扑排序
* 有向无环图的排序
* */
public int[] findOrder(int numCourses, int[][] prerequisites) {
//1、首先构建一个邻接矩阵表示图
List<List<Integer>> edges = new ArrayList<>();//邻接矩阵
int[] indeg = new int[numCourses];//统计入度
for (int i = 0; i < numCourses; i++) {
edges.add(new ArrayList<>());
}
for (int i = 0; i < prerequisites.length; i++) {
edges.get(prerequisites[i][1]).add(prerequisites[i][0]);
indeg[prerequisites[i][0]]++;
}
//2、将入度为0的节点加入队列
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < numCourses; i++) {
if (indeg[i] == 0){
queue.offer(i);
}
}
//3、将队列中的数拿出,加入结果集
int[] res = new int[numCourses];
int index = 0;
while (!queue.isEmpty()){
int node = queue.poll();
//加入结果集
res[index++] = node;
for (int v : edges.get(node)) {
indeg[v]--;
if (indeg[v] == 0){
queue.offer(v);
}
}
}
if (index != numCourses) return new int[0];
return res;
}