【leetcode210】课程表 II
目录
遍历二维数组(运行超时)
class Solution {
public:
vector<int> ans;
vector<bool> visited;
vector<vector<bool>> graph;
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
visited.assign(numCourses,0);
graph.assign(numCourses,visited);
for(int i=0;i<prerequisites.size();i++){
graph[prerequisites[i][0]][prerequisites[i][1]]=1;
}
for(int i=0;i<numCourses;i++){
int j;
if(visited[i]) continue;
for(j=0;j<numCourses;j++){
if(graph[i][j] && !visited[j]) break;
}
if(j==numCourses){
ans.push_back(i);
visited[i]=1;
i=-1;
}
}
if(ans.size()!=numCourses) ans.clear();
return ans;
}
};
dfs
class Solution {
public:
vector<int> ans;
vector<int> visited;
//0 -- 尚未搜索到
//1 -- 正在搜索中但未加入队列
//2 -- 已搜索完毕并加入队列
vector<vector<bool>> graph;
bool flag;
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
visited.assign(numCourses,0);
graph.assign(numCourses,vector<bool>(numCourses,0));
flag=0;
for(int i=0;i<prerequisites.size();i++){
graph[prerequisites[i][0]][prerequisites[i][1]]=1;
}
bfs(numCourses,0);
for(int i=0;i<numCourses;i++){
if(visited[i]==0) bfs(numCourses,i);
}
if(flag) ans.clear();
return ans;
}
void bfs(int numCourses,int node){
visited[node]=1;
for(int i=0;i<numCourses;i++){
if(graph[node][i] && visited[i]==0){
bfs(numCourses,i);
}
else if(graph[node][i] && visited[i]==1){
flag=1;
break;
}
}
visited[node]=2;
ans.push_back(node);
}
};