美文网首页
拓扑排序(二)——拓扑排序

拓扑排序(二)——拓扑排序

作者: 旺叔叔 | 来源:发表于2018-12-11 15:25 被阅读0次

    LeetCode_210_CourseScheduleII

    解法分析:

    根据上题的拓扑排序法,在每一轮“剥离节点”操作时候。
    将节点搜集,最后如果能剥完,那么输出即可。
    写法比第一题解法二,只变了几行代码。
    

    解法:

    public static int[] findOrder(int numCourses, int[][] prerequisites) {
        List<List<Integer>> graph = new ArrayList<>();
        int[] res = new int[numCourses];
        int index = 0;
        int[] in = new int[numCourses];
        for (int i = 0; i < numCourses; i++) {
            graph.add(new ArrayList<>());
        }
        for (int[] edge : prerequisites) {
            graph.get(edge[1]).add(edge[0]);
            in[edge[0]]++;
        }
    
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < numCourses; i++) {
            if (in[i] == 0) {
                queue.add(i);
                res[index++] = i;
            }
        }
    
        while(!queue.isEmpty()) {
            int i = queue.poll();
            for (int a : graph.get(i)) {
                in[a]--;
                if (in[a] == 0) {
                    queue.add(a);
                    res[index++] = a;
                }
            }
    
        }
    
        return index == numCourses ? res : new int[]{};
    }

    相关文章

      网友评论

          本文标题:拓扑排序(二)——拓扑排序

          本文链接:https://www.haomeiwen.com/subject/udqehqtx.html