码迷,mamicode.com
首页 > 编程语言 > 详细

<数据结构>拓扑排序解决课程表问题

时间:2019-11-22 14:08:09      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:ble   lse   数据结构   取出   length   queue   sites   bool   top   

  做的一个关于拓扑排序的练习,用拓扑排序解决课程表问题.即LeetCode第207题.

  问题描述: 现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1].给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习.

很明显,可以用拓扑排序来完成这类问题.代码如下:

  //课程名称用数字代表,起始编号为0
    public static boolean topSort(int numCourses, int[][] prerequisites) {
        int[] indegree = new int[numCourses];
        //遍历数组,提取每门课程的入度
        for (int[] pre : prerequisites) {
            indegree[pre[0]]++;
        }
        //创建一个队列,用来存放入度为0的课
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < indegree.length; i++) {
            if (indegree[i] == 0) {
                queue.add(i);
            }
        }
        //循环取出队首的课,每次取出后让课程总数减一
        while (!queue.isEmpty()) {
            int k = queue.remove();
            //输出课程编号
            System.out.println(k);
            numCourses--;
            //把对课程k有依赖的课的入度减1,并判断该课的入度是否为0,若为0则加入队列
            for (int[] pre : prerequisites) {
                if (pre[1] == k) {
                    indegree[pre[0]]--;
                    if (indegree[pre[0]] == 0) {
                        queue.add(pre[0]);
                    }
                }
            }
        }

        //如果课程总数等于0,则说明可完成所有课程学习
        if (numCourses == 0) {
            return true;
        } else {
            return false;
        }
    }

 

   
   

<数据结构>拓扑排序解决课程表问题

标签:ble   lse   数据结构   取出   length   queue   sites   bool   top   

原文地址:https://www.cnblogs.com/wangxiaoqian/p/11910947.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!