class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
vector<vector<int> > adjacent(numCourses);
vector<int> flags(numCourses); //用于判断节点是否已经被访问
for(int i=0; i<prerequisites.size(); i++){
adjacent[prerequisites[i][1]].push_back(prerequisites[i][0]); //构建链接表
}
for(int i=0; i<numCourses; i++){
if(!DFS(i, adjacent, flags)) return false;
}
return true;
}
bool DFS(int i, vector<vector<int> > &adjacent, vector<int> &flags){
if(flags[i]==-1) return true;
if(flags[i]==1) return false;
flags[i]=1;
for(auto j:adjacent[i]){
if(!DFS(j, adjacent, flags)) return false;
}
flags[i]=-1;
return true;
}
};
Leetcode 207 邻接表(深度优先搜索)
最新推荐文章于 2023-02-04 22:18:03 发布