行业知识
【力扣】207.课程表(图)
2026-10-29 20:03:43
来源:互联网转载
���旧还是有关于图的题目,这次不一样的点在于题目并没有明确的给出他是图的题目的形式,而是说让你根据其题目意思来进行操作。
首先,就是搞清楚题目的意思。假设你想学习A课程,那就是必须先学习B课程,但是这里给出的例子只有两个,我们要知道的是不一定只有B课程,可能还有其他的比如说C、D课程,要把这些都学完了你猜可以学A,同时A也可能成为某种课程的充分条件,那么这里我们就可以知道这就是图类题目的形式。
然后需要注意的是,题目给出的numCourse就是所有课程的种树,那我们就可以通过设置一个计时器,来记录有学某种课程的总数量,最后比较,若相等则返回true,反之返回false。
具体来实现的话,步骤如下:
- 需要一个一维数组来记录每个课程的入度,代码中是 inDegree
- 还需要一个map集合来记录各个结点之间的关系
- 首先需要遍历,用以记录每个课程的入度,以及他们之间的关系
- 然后将所有入度为0的课程存放入队列中
- 接着我们开始学了,学习该课程之后便需要更新其入度的数量,所以需要这个操作
最后完整的代码如下,我也是参考力扣上面其他的大神的,一起加油吧!
class Solution {public: bool canFinish(int numCourses, vector& prerequisites) { vector inDegree(numCourses); // 记录每个结点的入度 unordered_map map; // 记录每个结点之间的关系 // 遍历记录每个结点的入度并建立关系 for( int i = 0; i 0){ inDegree[map[selected][i]]--; if(inDegree[map[selected][i]] == 0){ que.push(map[selected][i]); // 将入度为0的课程放到队列中 } } } } if(count==numCourses) return true; else return false; }};
上一篇:破坏私人服务器游戏怎么玩?
下一篇:怎么域解析?