207. 课程表

这题要使用BFS算法,BFS也就是广度优先搜索,DFS是深度优先搜索,BFS是一层一层走,DFS是一条路走到头

这张图展示的就是BFS算法

在这道题里,最重要的就是创建一个用来放每个节点入度个数的数组以及一个二维节点邻接表

数组用来记录当前节点的入度个数,入度个数为0的节点可以入队

那么像0,1,2这三个节点就能入队,入队后要出队,出队时我们需要在二维节点邻接表中找到这个节点对应的后续节点,并且对应的给该节点的入度数减1

并且我们需要维护一个记录数,最后没有节点能够入队且队列中没有数据时跳出循环

java 复制代码
class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        // 记录每门课程的度数
        int[] inDegree = new int[numCourses];
        // 初始化邻接表
        List<List<Integer>> adjList = new ArrayList<>();
        for (int i = 0;i<numCourses;i++){
            adjList.add(new ArrayList<>());
        }
        // 计算每门课程的入度,并构建邻接表
        for(int[] prerequisite :prerequisites){
            int course = prerequisite[0];
            int preCourse = prerequisite[1];
            //该门课程的入读数加一
            inDegree[course]++;
            //邻接表中加入邻接数据
            adjList.get(preCourse).add(course);
        }

        //度数为0的课程先入队,因为本来就不需要先前课程
        Queue<Integer> queue = new LinkedList<>();
        for(int i = 0;i<numCourses;i++){
            if(inDegree[i] == 0)    {
                queue.offer(i);
            }
        }


        // 记录已完成的课程数
        int count = 0;
        //只要队列中还有度数为0的课程
        while(!queue.isEmpty()){
            int selectedCourse = queue.poll();
            //统计个数加1
            count++;
            //完成更新.后续涉及此课程为前提课程的课程的度数减1
            //先获取当前课程的后续课程列表
            List<Integer> nextCourses = adjList.get(selectedCourse);
            for(int nextCourse : nextCourses){
                //后续课程的入度减1
                inDegree[nextCourse]--;
                //如果减到0了,入队
                if(inDegree[nextCourse] == 0){
                    queue.offer(nextCourse);
                }
            }

        }
        return count == numCourses;

    }
}
相关推荐
coolwaterld29 分钟前
windows下删文件,找出“到底是谁占用
windows
caimouse2 小时前
Reactos 第6章 进程间通信(续)
windows
触底反弹3 小时前
拷个 .exe 到新电脑就跑不起来?你缺的不是文件,是对链接的理解
c++·windows·操作系统
W优化大师3 小时前
Windows 更新待处理弹窗一直不消失怎么解决,C 盘空间和后台任务该如何排查
windows·系统优化·磁盘清理·windows11·c盘·系统更新
无风听海3 小时前
在 ASP.NET Core 开发环境中为自定义域名签发受信任的自签名证书—HSTS 启用后的完整实践
windows·后端·asp.net
Ztopcloud极拓云视角4 小时前
我用AI辅助做了一个多端工具:解决2026世界杯回放被剧透的问题
人工智能·windows·个人开发
love530love4 小时前
2026年终极防坑指南:基于 EPGF 架构彻底“本地化” UV 环境与工具
人工智能·windows·python·架构·devops·uv·epgf
虾壳云官方4 小时前
【本地 AI 自动化最新工具】 OpenClaw 2.7.9 Windows 完整部署教程(包含安装包)
人工智能·windows·openclaw·openclaw安装·openclaw一键部署
lzjava20244 小时前
Python的数据结构,推导式、迭代器和生成器
数据结构·windows·python
接着奏乐接着舞5 小时前
springboot mp mybatis plaus
windows·spring boot·mybatis