原理

kahn实现
算法逻辑
int[] topoSort(int n, int[][] edges) {
    List<List<Integer>> graph = new ArrayList<>();
    for(int i = 0;i < n;i++) {
        graph.add(new ArrayList<>());
    }

    int[] indegree = new int[n];
    for(int[] e : edges) {
        graph.get(e[0]).add(e[1]);
        indegree[e[1]]++;
    }

    Queue<Integer> q = new ArrayDeque<>();
    for(int i = 0;i < n;i++) {
        if(indegree[i] == 0) q.offer(i);
    }

    int[] ans = new int[n];
    int idx = 0;
    while(!q.isEmpty()) {
        int c = q.poll();
        ans[idx++] = c;
        for(int next : graph.get(c)) {
            indegree[next]--;
            if(indegree[next] == 0) q.offer(next);
        }
    }

    if(idx < n) return new int[]{};
    return ans;
}
dfs实现(未学)
转载请注明出处