美文网首页
LeetCode 207. 课程表

LeetCode 207. 课程表

作者: 风卷晨沙 | 来源:发表于2019-08-02 15:52 被阅读0次

1、题目

课程表 - 力扣(LeetCode) https://leetcode-cn.com/problems/course-schedule/

2、题解

这道题的思路其实很简单,排除了不满足的情况自然就满足了
首先,如果学习次数少于课程数量,就一定不能满足
其次,如果将各个课程看成一个个的节点,节点的先决关系就是两点之间的连线,而且是有方向的连线。这样就课程和课程之间的关系就形成了一个有向图。但凡有向图中有两点间存在方向相反的两条线,即A->B 且B->A成立,那么基于类似死锁这样的情况,我们就无法学完当前的课程。
那么我们只需要判断当前数据代表的有向图是否存在环即可;

3、代码

 public class Solution {

        public boolean canFinish(int numCourses, int[][] prerequisites) {
            int[] inDegree = new int[numCourses];
            int[][] graph = new int[numCourses][numCourses];
            for(int i = 0; i < prerequisites.length; i++){
                graph[prerequisites[i][1]][prerequisites[i][0]] = 1;
                inDegree[prerequisites[i][0]]++;
            }
            //定义一个队列Q,并把所有入度为0的节点加入队列。
            Queue<Integer> queue = new LinkedList<>();
            for(int i = 0; i < numCourses; i++){
                if(inDegree[i] == 0){
                    queue.add(i);
                }
            }
            //取队首节点,输出。然后删去所有从它出发的边,并令这些边到达的顶点的入度减1,如果某个顶点的入度减为0,则将其加入队列。
            int num = 0;
            while(!queue.isEmpty()){
                int u = queue.poll();
                for(int v = 0; v < numCourses; v++){
                    if(graph[u][v] != 0){
                        inDegree[v]--;
                        if(inDegree[v] == 0){
                            queue.add(v);
                        }
                    }
                }
                num++;
            }
            return num == numCourses;
        }
    }

4、执行结果

image.png

相关文章

  • LeetCode-207-课程表

    LeetCode-207-课程表 207. 课程表[https://leetcode-cn.com/problem...

  • LeetCode 207. 课程表 | Python

    207. 课程表 题目来源:力扣(LeetCode)https://leetcode-cn.com/problem...

  • LeetCode 207. 课程表

    题目 207. 课程表 题目描述 现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先...

  • LeetCode 207. 课程表

    1、题目 课程表 - 力扣(LeetCode) https://leetcode-cn.com/problems/...

  • LeetCode 207. 课程表

    题目 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课...

  • 2019-01-21

    LeetCode 207. Course Schedule Description There are a tot...

  • 77. 组合/207. 课程表

    77. 组合 相关标签:回溯算法 207. 课程表 相关标签: DFS BFS 图 拓扑排序

  • 207.课程表!

    本题是一道拓扑排序的问题,个人感觉难度还是挺大的,即便写出来也感觉有些似懂非懂。另外我个人认为本题并没有使用传统的...

  • 207. 课程表

    完全考察拓扑排序的。

  • 207. 课程表

    解法 深度优先遍历解法 广度优先解法

网友评论

      本文标题:LeetCode 207. 课程表

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