[LeetCode]Course Schedule
来源:互联网 发布:吉他谱制谱软件 编辑:程序博客网 时间:2024/06/18 10:55
Course Schedule
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.
DFS搜索,系统维护的递归调用栈就是当前正在遍历的有向路径。一旦我们找到了一条有向边,v->w且w已经存在于栈中,就找到了一个环。
用一个onstack数组保存,递归调用栈的过程,判断是否有环。
class Solution {public: bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { vector<vector<int>> V(numCourses); for(int i=0; i<prerequisites.size(); ++i){ V[prerequisites[i].first].push_back(prerequisites[i].second); } vector<bool> marked(numCourses,false); vector<bool> onstack(numCourses,false); bool cycle = false; for(int i=0; i<numCourses; ++i){ if(!marked[i]) dfs(V,i,marked,onstack,cycle);//DFS } return !cycle; } void dfs(vector<vector<int>> &V,int Vindex,vector<bool> &marked,vector<bool> &onstack,bool &cycle){ onstack[Vindex] = true;//stack marked[Vindex] = true;//marked for(int i=0; i<V[Vindex].size(); ++i){ if(cycle == true) return; int w = V[Vindex][i]; if(!marked[w]){ dfs(V,w,marked,onstack,cycle); } else if(onstack[w]) cycle = true; } onstack[Vindex] = false; }};</span>
0 0
- Leetcode-Course Schedule && Course Schedule II
- leetcode-Course Schedule
- LeetCode 207 - Course Schedule
- [LeetCode] Course Schedule
- LeetCode Course Schedule
- [leetcode] Course Schedule
- Leetcode Course Schedule
- [leetcode]Course Schedule
- leetcode:Course Schedule
- [leetcode]Course Schedule II
- leetcode - Course Schedule II
- LeetCode Course Schedule II
- [leetcode] Course Schedule II
- [leetcode]Course Schedule
- leetcode:Course Schedule II
- [LeetCode] Course Schedule II
- Leetcode Course Schedule II
- leetcode 207: Course Schedule
- 中级篇——背包问题1(01背包)
- WebMagic-介绍
- C#下载文件(TransmitFile/WriteFile/流方式)实例介绍
- Impala与Hbase整合用于ETL过程尝试(1)
- Android—图片上传压缩工具类
- [LeetCode]Course Schedule
- Android里面主菜单里面设置菜单列表,单项选择,多项选择的实现
- R树空间索引
- HDOJ--2003
- String.Format格式说明
- 每天UP一点点 - 15.12.15(输出文字)
- LeetCode 107:Binary Tree Level Order Traversal II
- 友盟微信登录-切换账号重新拉起授权
- 在茫茫人海中发现相似的你——局部敏感哈希(LSH)