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

力扣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.dtcms.com/a/208088.html

相关文章:

  • 06 如何定义方法,掌握有参无参,有无返回值,调用数组作为参数的方法,方法的重载
  • 推荐一款滴滴团队开源流程图编辑框架logic-flow
  • A服务器备份rabbitmq持久化目录到B服务器,不显示mq队列消息
  • RabbitMQ ⑥-集群 || Raft || 仲裁队列
  • 数据库设计文档撰写攻略
  • vscode使用ssh链接服务器
  • Postgresql 数据库实例管理命令
  • mybatis-plus与jsqlparser共用时报sql解析错误
  • 第十天 高精地图与定位(SLAM、RTK技术) 多传感器融合(Kalman滤波、深度学习)
  • 射频芯片学习
  • 学习黑客TTryHackMe — Tcpdump基础 | 网络安全入门(THM)
  • 【漫话机器学习系列】274.基尼指数(Gini Index)
  • Oracle常用函数
  • LVS 负载均衡集群应用实战
  • 数据库系统概论(九)SQL连接查询语言超详细讲解(附带例题,表格详细讲解对比带你一步步掌握)
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(28):ばかり
  • SQL 的 DECODE 函数
  • MacOS Docker 启动 RustDesk Server OSS
  • 多版本Node.js共存管理工具NVM详细使用教程
  • postgresql 常用参数配置
  • 第七部分:第二节 - 在 Node.js 中连接和操作 MySQL:厨房与仓库的沟通渠道
  • Postgresql 数据库体系架构
  • 从逆流监测到智慧用电:ADL200N-CT系列单相导轨表赋能家庭绿色能源
  • 储能电站:风光储一体化能源中心数字孪生
  • TiDB迁移实战:解决“Region is unavailable”报错与隐式类型转换引发的索引失效
  • PHP序列化数据格式详解
  • 多模态大语言模型arxiv论文略读(九十)
  • 【Python 基础与实战】从基础语法到项目应用的全流程解析
  • 编程技能:字符串函数10,strchr
  • php 根据另一个数组中 create_time 的时间顺序,对原始数组进行排序。