题意:
在判断能否修完全部课程的基础上,如果能,输出任意一个课程顺序。
思路:
递归。在判断是否有环的基础上,记录访问顺序。
代码:
class Solution { public: vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) { vector<vector<int>> graph(numCourses); for (auto pre : prerequisites) { graph[pre[0]].push_back(pre[1]); } vector<int> order; vector<int> vis(numCourses, 0); for (int i=0; i<numCourses; ++i) { if (!vis[i]) { vis[i] = 1; if (!dfs(i, graph, vis, order)) { order.clear(); return order; } } } return order; } bool dfs(int id, vector<vector<int>>& graph, vector<int>& vis, vector<int>& order) { for (auto edge: graph[id]) { if (vis[edge] == 1) return false; if (!vis[edge]) { vis[edge] = 1; if (dfs(edge, graph, vis, order) == false) return false; } } vis[id] = -1; order.push_back(id); return true; } };
迷迷糊糊就过了的感觉。
文章来源: https://blog.csdn.net/iCode_girl/article/details/91398841