【LeetCode】210. Course Schedule II
来源:互联网 发布:js鼠标移动显示图片 编辑:程序博客网 时间:2024/05/20 06:07
问题描述
在207.Course Schedule问题的基础上,求出能够完成所有课程的其中一种可能的顺序方案,如果不存在,则返回空数组。问题就变成:如何按照post值递减来保存节点。
class Solution {public: //1、设置计步器,全局变量 int count = 0; vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { vector<int> result; if(prerequisites.size() == 0){ //没有边存在时,随便排序都可以 for(int i=0;i<numCourses;i++){ result.push_back(i); } return result; } //2、建图。 vector<unordered_set<int>> graph(numCourses); for(auto pre : prerequisites){ graph[pre.second].insert(pre.first); } //3、生成(pre, post)值。 vector<pair<int, int>> value(numCourses, make_pair(0, 0)); for(int i=0; i<numCourses; i++){ DFS(graph, value, i); } //4、求函数返回值。 for(int v=0; v<numCourses; v++){ for(int u : graph[v]){ if(value[u].first < value[v].first && value[u].second > value[v].second){ return result; //不是return false了 //return false; } } } for(int i=2*numCourses; i >= 1; i--){ //从最大的post值开始递减遍历 for(int j=0; j<numCourses; j++){ //遍历所有节点,找到post值=i的节点 if(value[j].second == i){ //只看post值,不会看pre值,记得考虑这样一种情况[(0,1),(1,2)] result.push_back(j); } } } return result; //return true; }//findOrder //5、DFS函数:对未被访问过的节点进行pre,post值的更新 void DFS(vector<unordered_set<int>>& graph, vector<pair<int, int>>& value, int index){ if(value[index].first == 0){ value[index].first = ++count; for(auto neigh : graph[index]){ DFS(graph, value, neigh); } value[index].second = ++count; } }//DFS};
阅读全文
0 0
- [leetcode] 210.Course Schedule II
- Leetcode 210. Course Schedule II
- 210. Course Schedule II LeetCode
- leetcode 210. Course Schedule II
- LeetCode *** 210. Course Schedule II
- leetcode.210. Course Schedule II
- LeetCode 210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- Leetcode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- Leetcode 210. Course Schedule II
- [LeetCode]210. Course Schedule II
- leetcode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- LeetCode 210. Course Schedule II
- 【LeetCode】210. Course Schedule II
- [leetcode]210. Course Schedule II
- leetcode 210. Course Schedule II
- HDU2159
- 让ScrollView滑动到最顶端
- Paxos算法细节详解--通过现实世界描述算法
- MySQL学习笔记(4)
- Android 反编译初探 应用是如何被注入广告的
- 【LeetCode】210. Course Schedule II
- 深入理解UE4宏定义—— GENERATED_BODY
- Flutter进阶—实现动画效果(十)
- Android本地程序的printf输出到logcat中
- 安卓开发:自定义PopupWindow,实现模仿iOS底部弹出菜单
- iOS常用代码段分享
- C# redis操作
- Android布局(1)
- Java25