【LeetCode 210】Course Schedule II

匿名 (未验证) 提交于 2019-12-02 23:39:01

题意:

在判断能否修完全部课程的基础上,如果能,输出任意一个课程顺序。

思路:

递归。在判断是否有环的基础上,记录访问顺序。

代码:

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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!