LeetCode:53.课程表
目录
1.课程表
1.课程表
判断课程是否可以学习完,本质其实是在判断是否有环,我们使用一个邻接表来存放课程之间的对应关系,同时使用3个标志位来表示不同的状态,0表示未访问,1表示访问中遇到了环,2表示访问结束且无环,同时用一个bool值来标志是否遇到了环,进行剪枝操作,如果遇到就可以提前返回了
class Solution {vector<vector<int>> edges;vector<int> vis;bool check = true;
public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {edges.resize(numCourses);vis.resize(numCourses);for(auto info : prerequisites)edges[info[1]].push_back(info[0]);for(int i = 0; i < numCourses && check == true; i++)if(vis[i] == 0)dfs(i);return check;}void dfs(int i){vis[i] = 1;for(auto x : edges[i]){if(vis[x] == 0){dfs(x);if(check == false) return;}else if(vis[x] == 1){check = false;return;}}vis[i] = 2;}
};