leetcode
来源:互联网 发布:孔明棋算法 编辑:程序博客网 时间:2024/06/15 17:25
Question 210–Course Schedule II
题设和Course Schedule一样,只不过要求能完成所有课程时返回一个可行的上课顺序;否则,不能完成所有课程时,返回一个空;
算法
对于[a,b]点对,将b作为边的起始点,a作为边的终点。
用BFS,先将每个点的入度算出来。然后逐渐将入度为0的点去掉,将该点的入度改为-1,并将该点加入要返回的队列中,同时将该点的邻接点的入度减小1。若在所有的点的入度变为-1之前没有入度为0的点,则存在环,返回空。若所有的点的入度都变为了-1,则返回保存的顺序队列。
code
class Solution {public: vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites){ vector<int> order,degrees(numCourses,0); queue<int> zerodegree; //算出每个点的入度 for(auto p: prerequisites){ degrees[p.first]++; } //将入度为0的点加入队列 for(int i=0; i<numCourses; i++){ if(!degrees[i]) zerodegree.push(i); } int num=0; while(!zerodegree.empty()){ int zerodegreenode = zerodegree.front(); zerodegree.pop(); degrees[zerodegreenode] = -1; num++; order.push_back(zerodegreenode); for(auto p: prerequisites){ if(p.second==zerodegreenode){ degrees[p.first]--; if(degrees[p.first]==0) zerodegree.push(p.first); } } } if(num==numCourses) return order; else return vector<int>(); }};
阅读全文
0 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- 22. Generate Parentheses
- java基础1:继承
- miscdevice结构体
- C# 编写串口程序
- nvme_data_struct 分析
- leetcode
- 3.3用变动数据做模拟
- 数据库错题库
- 从TimeQuest角度看set_max_delay
- HTML&CSS实验(4)
- JSONObject.fromObject--JSON与对象的转换
- Oracle 11g RAC 补丁升级时报ORA-01565: error in identifying spfileprod.ora 错误处理
- 算法概论
- MarkDown语法