拓扑排序

210. 课程表 II

拓扑排序,

BFS

对于入度为0的节点入队列。

出栈时,记录,将对应的节点入度减一。

判断出栈的节点是否是全部节点。

  public int[] findOrder(int numCourses, int[][] prerequisites) {
        int[] input = new int[numCourses];
        int[] res = new int[numCourses];
        int index = 0;
        Queue<Integer> queue = new LinkedList<>();
        for (int [] edge : prerequisites) {
            input[edge[0]] ++;
        }
        for (int i = 0 ;i <numCourses ;i++) {
            if(input[i] == 0) queue.add(i);
                
        }
        while(!queue.isEmpty()) {
            int courses = queue.poll();
            res[index++] =courses;
            for (int [] edge : prerequisites) {
                if(edge[1] == courses) {
                    input[edge[0]] --;
                    if(input[edge[0]] == 0) queue.add(edge[0]);
                }
            } 
        }
        if(index !=numCourses)    return new  int[] {};
        return res;    
        }
View Code

DFS     将队列换成栈即可。

虽然效率不高,但能过。

posted @ 2021-05-19 16:37  白清欢  阅读(49)  评论(0编辑  收藏  举报