本文主要是介绍【力扣】210 课程表(c++)解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
具体参考 207,一模一样的题目只是最后多了学习课程的输出 ,注意下深搜栈先入后出,最后输出需要reverse一下result
207题解: link
class Solution {
//dfs深度优先
private:
//输入:课程数 课程关系prerequisitesvector<vector<int>> edges;//二维数组vector<int> visited; //访问情况vector<int> result;bool valid = true;public:void dfs(int u){visited[u] = 1;for(int v :edges[u]){if(visited[v] == 0){dfs(v);if(!valid){return;}}else if(visited[v] == 1){valid = false;return;}}visited[u] = 2;result.push_back(u);}vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {edges.resize(numCourses);visited.resize(numCourses);for(const auto& info :prerequisites){edges[info[1]].push_back(info[0]);}for(int i = 0;i<numCourses &&valid;i++){if(!visited[i]){dfs(i);}if(!valid){return{};}}reverse(result.begin(),result.end());return result; }
};
这篇关于【力扣】210 课程表(c++)解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!