标签: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