中文网站建设中模板,做视频网站版权怎么解决,我想做个网站推广怎么做,中文网站 可以做谷歌推广吗题目
课程与课程之间的先决条件组成有向图#xff0c;课程是图中的顶点#xff0c;课程之间的先决条件是图中的有向边。对于数组 prerequisites 中的元素 [a,b]#xff0c;表示在学习课程 a 前必须先完成课程 b#xff0c;对应从 b 指向 a 的有向边#xff0c;b 是 a 的前…题目
课程与课程之间的先决条件组成有向图课程是图中的顶点课程之间的先决条件是图中的有向边。对于数组 prerequisites 中的元素 [a,b]表示在学习课程 a 前必须先完成课程 b对应从 b 指向 a 的有向边b 是 a 的前驱课程a 是 b 的后继课程。
如果课程之间的先决条件不存在环则可以完成所有课程如果课程之间的先决条件存在环则不能完成所有课程。因此判断是否可能完成所有课程等价于判断有向图是否为无环图。
解法
判断有向图是否为无环图可以使用拓扑排序拓扑排序可以使用广度优先搜索或深度优先搜索实现。
class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {ListInteger[] adjacentArr new List[numCourses];int[] indegrees new int[numCourses];for (int i 0; i numCourses; i) {adjacentArr[i] new ArrayListInteger();}for (int[] prerequisite : prerequisites) {adjacentArr[prerequisite[1]].add(prerequisite[0]);indegrees[prerequisite[0]];}int finishCount 0;QueueInteger queue new ArrayDequeInteger();for (int i 0; i numCourses; i) {if (indegrees[i] 0) {queue.offer(i);}}while (!queue.isEmpty()) {int curr queue.poll();finishCount;ListInteger adjacent adjacentArr[curr];for (int next : adjacent) {indegrees[next]--;if (indegrees[next] 0) {queue.offer(next);}}}return finishCount numCourses;}
}