1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| class Solution { public: vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) { vector<vector<int>> graph(numCourses); for(auto& prerequisite : prerequisites) graph[prerequisite[0]].push_back(prerequisite[1]); vector<int> checked(numCourses, 0); vector<int> visited(numCourses, 0); vector<int> ret; ret.reserve(numCourses); for(int i = 0; i < numCourses; ++i) if(!dfs(ret, i, checked, visited, graph)) return {}; return ret; } private: bool dfs(vector<int>& ret, int course, vector<int>& checked, vector<int>& visited, vector<vector<int>>& graph) { if(visited[course]) return false; if(checked[course]) return true; visited[course] = 1; for(auto& p : graph[course]) if(!dfs(ret, p, checked, visited, graph)) return false; checked[course] = 1; ret.push_back(course); visited[course] = 0; return true; } };
|