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;

    }
}
相关推荐
薛定猫AI18 小时前
OpenAI Codex本地完整配置教程|(Windows/Mac/Linux全平台,修复鉴权报错)
linux·windows·macos
w01_02_0319 小时前
deepseek, harness , windows , 安装。
windows
辻弋20119 小时前
手动关服务会自动重启、组策略家庭版用不了——Windows Update Blocker用“禁用+锁定”双保险,让Win10/11自动更新彻底闭嘴
服务器·人工智能·windows·电脑·开源软件
qinwsq20 小时前
Gmssl windows下编译
windows·gmssl
明王明王20 小时前
Ubuntu 26.04 使用 Windows Spotlight:给 Bing Wallpaper 加上 Spotlight 支持
linux·windows·ubuntu
Kismet_nvi21 小时前
Python 基础核心知识点总结
开发语言·windows·python
IT大白鼠1 天前
MSF环境搭建全教程(Kali/Windows/Mac/Docker)
windows·macos·msf
孫治AllenSun1 天前
【JavaAI】LangChain4J(1) Windows 安装 Ollama 本地大模型
人工智能·windows
FORCECON11 天前
力控SCADA工程升级:信创跨平台迁移方案,快速搭建安全自主的工业监控系统
linux·windows·自动化·信创·scada·监控组态软件
心之语歌1 天前
Windows Docker Desktop 部署 SQL Server 2022 完整安装手册
windows·docker·容器