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;

    }
}
相关推荐
曹牧16 小时前
C#:`JsonConvert.DeserializeObject`
windows·c#
JckOLF04Z18 小时前
软件项目“免坑”指南
windows
imperialeast19 小时前
WinAXP音乐播放器8月4日更新
windows·算法·ui
aGdF8E3gQ19 小时前
16. LangChain ChatPromptTemplate多模态应用实战
windows·langchain
IT小盘20 小时前
17-构建Prompt测试集-提示词优化不再凭感觉
服务器·windows·prompt
神奇霸王龙1 天前
Agent 5 场景屠夫:跨厂商基座横评
人工智能·windows·ai·dubbo·agent·ai编程·阿里
柒@宝儿姐1 天前
若依 B 端从浏览器访问升级为 Windows 安装包交付流程
前端·javascript·vue.js·windows
肖恭伟1 天前
MinerU 新手完整配置教程:Windows 下将 PDF 转为带图片的 Markdown
windows·pdf
梓沂1 天前
Oracle 11g 跨平台迁移实战:从 Windows 到 CentOS 的完整记录
windows·oracle·centos
yagami_gagami1 天前
第四届黄河流域公安院校电子物证个人赛程序逆向分析
android·windows·网络安全