LeetCode 207 Course Schedule
来源:互联网 发布:天刀少女捏脸数据库 编辑:程序博客网 时间:2024/05/16 18:11
There are a total of n courses you have to take, labeled from 0 to n - 1.
Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]
Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?
For example:
2, [[1,0]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.
2, [[1,0],[0,1]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.
Note:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.
这道题其实就是检查图有没有环,检查图有没有环比较常用的方法就是使用拓扑排序,拓扑排序的思路就是不断从图中取出入度为0的点,直到不能没有入度为0的点,这样操作之后如果可以将图中所有的点全部取出,那么说明这个图是可以进行拓扑排序的,本题的具体的方法如下流程:
1. 找到入度为0的节点,入队
2. 队列是否为空
2.1 为空则跳出循环
2.2 不为空则取出一个节点,取出的记录数+1,作为当前点,遍历该当前点的所有邻接点,并将所有节点的入度均-1,表示取出了当前点,如果有节点的入度-1之后变为0,那么将其入队。
3. 取出的节点是否等于总的节点数
3.1 等于则说明没有环
3.2不等于则说明有环
具体代码如下:
class Solution {public: bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { vector<vector<int> > relation(numCourses); int size = prerequisites.size(); vector<int> indegree(numCourses); int outnum = 0; for(int i = 0; i < size; i++) { pair<int, int> pairtmp = prerequisites[i]; relation[pairtmp.first].push_back(pairtmp.second); indegree[pairtmp.second]++; } stack<int> wait; for(int i = 0; i < numCourses; i++) { if(indegree[i] == 0) wait.push(i); } while(!wait.empty()) { int cur = wait.top(); wait.pop(); outnum++; for(int i = 0; i < relation[cur].size(); i++) { int adject = relation[cur][i]; indegree[adject]--; if(indegree[adject] == 0) wait.push(adject); } } if(outnum == numCourses) return true; else return false; }};
- LeetCode 207 - Course Schedule
- leetcode 207: Course Schedule
- LeetCode 207-Course Schedule
- 【Leetcode】Course Schedule #207
- LeetCode 207 Course Schedule
- LeetCode(207)Course Schedule
- leetcode 207: Course Schedule
- [LeetCode 207] Course Schedule
- 【LEETCODE】207-Course Schedule
- LeetCode 207 Course Schedule
- LeetCode 207 Course Schedule
- LeetCode 207 Course Schedule
- Leetcode 207 Course Schedule
- Leetcode 207 Course Schedule
- leetcode(207). Course Schedule
- Leetcode-207: Course Schedule
- LeetCode #207 Course Schedule
- leetcode 207 Course Schedule
- COM中GUID和UUID、CLSID、IID
- ClassNotFoundException, org.jboss.netty.channel.ChannelPipelineFactory 缺少jar包【远程调用dubbo分布式服务框架遇到的问题】
- spring和hibernate指定DB2数据库schema的方法
- Extjs之延迟加载
- 2015-7-9 积累
- LeetCode 207 Course Schedule
- JSTL中<c:forEach>标签使用范例
- iOS如何才能在招聘中表现得靠谱?
- MySQL分库分表
- POJ2762 Going from u to v or from v to u? 强连通+缩点
- iOS 本地缓存实现
- GRE写作必备句型
- 基于Xposed框架的锁屏录音机的实现总结
- IOS 时间格式 时间转换 大总结