Leetcode 207
来源:互联网 发布:核聚变还有多少年知乎 编辑:程序博客网 时间:2024/06/15 20:34
Leetcode 207, Couese schedule, 难度medium
这道题可以用DFS用拓扑的思想来解决,跟普通的dfs不一样,不仅需要记录已经访问过的节点,还需要记录当前正在访问的节点,因为拓扑就是判断是否是有向无环图,所以在从某一个节点开始进行深搜的时候,它的邻居结点如果又访问到了原来的节点那就是有环,当这个有向无环图可以分成两个强连通部件的时候,从一个强连通部件指向另一个已经访问过的强连通部件的时候,因为另一个强连通部件中的Course不在当前的DFS中,所以虽然是访问了已经访问的节点,但是不属于有环。
以下是代码:
class Solution { public: bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { vector<unordered_set<int>> matrix(numCourses); for(auto i: prerequisites) { matrix[i.second].insert(i.first); } vector<bool> visited(numCourses, false), flag(numCourses, false); for(int i = 0; i < matrix.size(); i++) if(!flag[i] && dfs(matrix, visited, flag, i)) return false; return true; } bool dfs( vector<unordered_set<int>> &matrix, vector<bool>& visited, vector<bool>& flag, int i) { if(flag[i]) return false; visited[i] = flag[i] = true; for(auto it = matrix[i].begin(); it != matrix[i].end(); it++) { if(visited[*it] || dfs(matrix, visited, flag, *it)) return true; } visited[i] = false; return false; }};
阅读全文
0 0
- Leetcode 207
- 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(Java)
- Leetcode 207 Course Schedule
- leetcode(207). Course Schedule
- Leetcode-207: Course Schedule
- 10 request&&response的学习笔记
- Otto源码详解
- Java中CountDownLatch的使用
- Android自动化测试(UiAutomator)简要介绍
- javaScript 引用 浅拷贝 深拷贝
- Leetcode 207
- 视频做背景无法自适应屏幕的问题
- Hadoop HA的部署
- java的学习路线
- web中验证码的实现
- 等价表达式 解题报告
- mysql查询 EXPLAIN 简单解释
- 用mysqli连接数据库
- NYOJ-ACM-素数距离问题