首页 > 其他分享 >图:207课程表 题解:入度数组,邻接表,队列,拓扑排序

图:207课程表 题解:入度数组,邻接表,队列,拓扑排序

时间:2024-09-15 20:49:01浏览次数:8  
标签:pre map 207 int 题解 入度 inDegree 课程表

207. 课程表 - 力扣(LeetCode)

没做出来,参考题解,这篇题解写的非常好。

把一个 有向无环图 转成 线性的排序 就叫 拓扑排序。(没太懂这句话的意思)

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        vector<int> inDegree(numCourses, 0);//入度数组
        unordered_map<int, vector<int>> map; //邻接表
        
        //初始化入度数组和邻接表
        for(const auto& pre : prerequisites){
            inDegree[pre[0]]++; //计算每个课程的入度
            map[pre[1]].push_back(pre[0]); //建立邻接表
        }

        queue<int> q;

        //将所有入度为0的课程加入队列
        for(int i = 0; i < numCourses; i++){
            if(inDegree[0] == 0){
                q.push(i);
            }
        }

        int count = 0;//选课计数

        //开始拓扑排序
        while(!q.empty()){
            int selected = q.front(); //选出当前的课
            q.pop();
            count++;//选课数+1

            //获取依赖这门课的后续课程
            if(map.find(selected) != map.end()){
                for(int nextCourse : map[selected]){
                    inDegree[nextCourse]--; //减少后续课程的入度
                    if(inDegree[nextCourse] == 0){
                        q.push(nextCourse); //如果入度为0,则加入队列
                    }
                }
            }
        }
        return count == numCourses; //如果选完的课数等于总课数,返回true
    }
};

 

标签:pre,map,207,int,题解,入度,inDegree,课程表
From: https://www.cnblogs.com/spp20/p/18415597

相关文章

  • 【题解】【动态规划】—— [NOIP2006 普及组] 开心的金明
    【题解】【动态规划】——[NOIP2006普及组]开心的金明[NOIP2006普及组]开心的金明题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.题意解析2.AC代码2.1.二维d......
  • 【题解】【模拟】—— [NOIP2008 普及组] ISBN 号码
    【题解】【模拟】——[NOIP2008普及组]ISBN号码[NOIP2008普及组]ISBN号码题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#2提示1.思路解析2.AC代码[NOIP2008普及组]ISBN号码通往洛谷的传送门题目描述每一本正式出版的图书都有一个I......
  • 【题解】—— [NOIP2011 普及组] 数字反转
    【题解】——[NOIP2011普及组]数字反转[NOIP2011普及组]数字反转题目描述输入格式输出格式输入输出样例输入#1输出#1输入#2输出#2提示1.思路解析2.AC代码[NOIP2011普及组]数字反转通往洛谷的传送门题目描述给定一个整数......
  • 【题解】【枚举】——First Step (ファーストステップ)
    【题解】【枚举】——FirstStepファーストステップFirstStep(ファーストステップ)题目背景题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.思路解析2.AC代码FirstStep(ファーストステップ)原题在洛谷上题目背景我们Aqours,要第一次举办演唱会啦......
  • 【题解】【数组】—— [NOIP2005 普及组] 校门外的树
    【题解】【数组】——[NOIP2005普及组]校门外的树[NOIP2005普及组]校门外的树题目描述输入格式输出格式输入输出样例输入#1输出#1提示1.题意解析2.AC代码[NOIP2005普及组]校门外的树通往洛谷的传送门题目描述某校大门外长度为......
  • 2024ICPC网络赛第一场题解(部分)
    这一场基本纯挂件,给队友翻译翻译题面,帮队友打打板子了,可惜最后40sL题冲了一个\(O(\frac{n^3}{w})\)的bitset最后wa了,所以下面的题解我也只能看着队友代码说说大概,主要参考一下代码吧。A题意给出32个队伍的能力值,和比赛的规则,其中中国队是第一个队伍,问所有分组的情况下,中国队......
  • 1928.规定时间内到达终点的最小话费,题解
    1928.规定时间内到达终点的最小花费-力扣(LeetCode)有点难,参考官方题解代码:利用了动态规划思想,逐步计算从起点到各个城市在不同时间下的最小费用。 1.代码解释,涉及,static关键字,constexpr关键字,INT_MAX除以2赋值的含义staticconstexprintINFTY=INT_MAX/2; 1.**`......
  • Hetao P1391 操作序列 题解 [ 绿 ] [ 二维线性 dp ]
    操作序列:简单的二维dp。观察我们每次操作可以让\(x\)变为\(2x-1\),或者当\(x\)为奇数时让\(x\)变为\(\frac{x+1}{2}\)。显然,执行第一种操作,会使\(x\)变成奇数。那一旦我们连续执行两次操作,\(x\)就会变为:\[\frac{(2x+1)-1}{2}=\frac{2x}{2}=x\]也就是说,当\(x\)......
  • 语言 题解
    语言题解本题其实没有什么好说的,主要是提供一种强大的,神秘的,诡异的,跑得飞快的,逆天的,唐诗的双\(\log\)做法首先考虑将答案分类,分成跨过这个语言的lca的和没跨过的对于没跨过的,可以发现就是对于每个点,求能扩展到的深度最低的节点,这个直接暴力做就是\(O(n)\)的,所以说我们直......
  • 题解:AT_pakencamp_2019_day3_d パ研軍旗
    题意简述给定\(5\)行\(N\)列的网格,每个格子有四种可能的颜色。要使网格中每一列的颜色都一样但不能是黑色,并且相邻两列的颜色不相同。问最少改变多少个格子的颜色能满足要求。思路分析为方便处理,把给定的红色、蓝色、白色、黑色分别转成数字\(1,2,3,4\)。考虑dp。不妨......