当前位置: 首页 > ai >正文

力扣HOT100之图论:207. 课程表


这道题第一次做,有向图判断是否有环的思路是完全忘完了,这次没有看灵神的题解,感觉笨猪爆破组的题解更加通俗易懂一些,强烈建议参考他的题解,因为图论本来就很难,光是理解起来就已经很费劲了,没有必要为了代码的简洁和优雅而忽略了代码的可读性。这道题还是用BFS来做,我们需要明确几个点:

  1. 当一门课程需要前置课程时,这门课程是有入度的,当该门课程的前置课程修完一门,则入度-1,当入度减为0时,说明该门课程的前置课程全部修完,可以直接修读。
  2. 只有当一门课程的入度为0时,才能加入队列中,从队列中取出来的课程,都是在现有的基础上可以直接修读的课程,每当取出一门课程,我们就需要将该课程的所有目标课程的入度减一(前置课程为是目标课程服务的),当有目标课程的入度被减为0时,我们需要立马将其加入到队列中
  3. 当队列为空时,说明能修读的课程都已经修读完了,只有当图中存在环时,不能修读完所有课程,因为存在循环依赖,因此我们需要定义一个变量finish来记录已经修读完毕的课程,应当在课程被从队列中弹出时(被弹出就意味着该课程被修读)标记,当循环结束时,判断修读的课程数和输入的课程总数是否相等,若不相等则一定有环。
    明白了以上几个关键要点后,代码就很容易写了。
class Solution {
public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {vector<int> inDegree(numCourses, 0);    //记录每门课程的入度vector<vector<int>> grah(numCourses);  //使用vector存储邻接表//计算每门课程的入度,并构建邻接表for(vector<int>& prerequisite : prerequisites){int course = prerequisite[0];   //目标课程int preCourse = prerequisite[1];    //前置课程inDegree[course]++;    //目标课程的入度+1grah[preCourse].emplace_back(course);  }queue<int> My_Queue;//存储入度为0的课程for(int i = 0; i < inDegree.size(); i++){if(inDegree[i] == 0)My_Queue.push(i);}int finish = 0;  //记录已修完的课程while(!My_Queue.empty()){int pre = My_Queue.front();My_Queue.pop();finish++;// pre课程的所有目标课程入度-1for(auto course : grah[pre]){inDegree[course]--;if(inDegree[course] == 0)  //某门后续课程可以直接修读了My_Queue.push(course);}  }return finish == numCourses;}
};
http://www.xdnf.cn/news/8249.html

相关文章:

  • MQSQL笔记二——非操控数据操作
  • 【Python】Python 装饰器的用法总结
  • 聚铭安全管家平台2.0重磅发布——大模型智驱高效降本新方向
  • 基于OpenLCA、GREET、R语言的生命周期评价方法、模型构建及典型案例应用
  • LVGL(lv_span富文本控件)
  • Ubuntu 25.04 锁屏不能远程连接的解决方案
  • JavaScript闭包
  • 数据保护与通讯安全
  • 【论文精读】2023 CVPRW--EAVSR现实世界视频超分辨率(RealWorld VSR)
  • 【Go】1、Go语言基础
  • LeRobot 框架的开发指南 (下)
  • react native搭建项目
  • 计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度
  • 设计模式系列(05):工厂方法模式(Factory Method)
  • 量化研究---bigquant策略交易api研究
  • 清华大学:基于生成模型的上肢外骨骼机器人助力个性化中风康复
  • 【菜狗work前端】小程序加if判断时不及时刷新 vs Web
  • Spring源码编译
  • 数学建模day01
  • 【AI测试革命】第七期:AI性能测试的深度实践——从智能建模到自动化调优的全链路升级
  • 力扣-最大连续一的个数
  • == 和 equals 的区别
  • 汽车充电桩专用ASCP210系列电气防火限流式保护器
  • 2025年河北省职业院校技能大赛“网络空间安全技能大赛”赛项样题A
  • 软考 UML中的 用例图 的泛化 包含 扩展 关系
  • 院校机试刷题第九天:P1042乒乓球、回顾代码随想录第二天
  • NBA足球赛事直播源码体育直播M35模板赛事源码
  • 智能办公协同系统开发日志(三):画板模块设计与实现全记录
  • windows 删除文件夹提示“操作无法完成,因为其中的文件夹或文件已在另一程序中打开”
  • Git命令汇总(自用,持续更新update 5/23)