欢迎大家积极在评论区留言发表自己的看法,知无不言,言无不尽,养成每天刷题的习惯,也可以自己发布优质的解题报告,供社区一同鉴赏,吸引一波自己的核心粉丝。
今天是五月集训第三十天:拓扑排序
207. 课程表
1976. 到达目的地的方案数
// 207. 课程表
class Solution {
#define maxn 100010
vector<int> edges[maxn];
int deg[maxn]; //(1)
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
queue<int> q;
for(int i = 0; i < numCourses; ++i) {
edges[i].clear();
deg[i] = 0;
} //(2)
for(int i = 0; i < prerequisites.size(); ++i) {
edges[prerequisites[i][1]].push_back(prerequisites[i][0]);
++deg[prerequisites[i][0]];
} //(3)
for(int i = 0; i < numCourses; ++i) {
if(deg[i] == 0) {
q.push(i);
}
} //(4)
while (!q.empty())
{
int u = q.front();
q.pop();
for(int i = 0; i < edges[u].size(); ++i) {
int v = edges[u][i];
if(--deg[v] == 0) {
q.push(v);
}
}
} //(5)
for(int i = 0; i < numCourses; ++i) {
if(deg[i]) {
return false;
}//(6)
}
return true;
}
};
[1, 0]
表示要学“1”这门课你得先修完“0”,抽象出我从零这画出一个箭头指向了1。并且把1的入度要增加1,表明它有先修课程;[0,1],[1,0]
要学“0”先学“1”,要学“1”先学“0”构成了环,那这样肯定是咋都学不好,就返回false。// 1976. 到达目的地的方案数