Course Schedule II(C++课程表 II)

淩亂°似流年 2022-09-01 14:50 254阅读 0赞

(1)dfs+stack

  1. class Solution {
  2. private:
  3. vector<vector<int>> vec;
  4. vector<int> vis;
  5. stack<int> s;
  6. vector<int> res;
  7. bool tag=true;
  8. public:
  9. void helper(int x) {
  10. vis[x]=1;
  11. for(int i=0;i<vec[x].size();i++) {
  12. if(vis[vec[x][i]]==0) {
  13. helper(vec[x][i]);
  14. if(!tag) return;
  15. } else if(vis[vec[x][i]]==1) {
  16. tag=false;
  17. return;
  18. }
  19. }
  20. vis[x]=2;
  21. s.push(x);
  22. return;
  23. }
  24. vector<int> findOrder(int n, vector<vector<int>>& p) {
  25. vec.resize(n);
  26. vis.resize(n);
  27. for(int i=0;i<p.size();i++) {
  28. vec[p[i][1]].push_back(p[i][0]);
  29. }
  30. for(int i=0;i<n&&tag;i++) {
  31. if(vis[i]==0&&tag) helper(i);
  32. }
  33. if(!tag) return {};
  34. while(!s.empty()) {
  35. res.push_back(s.top());
  36. s.pop();
  37. }
  38. return res;
  39. }
  40. };

发表评论

表情:
评论列表 (有 0 条评论,254人围观)

还没有评论,来说两句吧...

相关阅读