算法课第四周作业 | Course Schedule
来源:互联网 发布:linux怎么打包压缩文件 编辑:程序博客网 时间:2024/06/13 11:30
写在前面:
这种算法课在前面DFS的基础上讲了拓扑排序/寻找有向无环图。这道题正是用此思路解答
题意解读:
给定一个课程的数量n,课程编号为0~n-1,给出课程学习顺序对,比如【1,2】,则必须先学了课程1再能学课程2
问所有可能能不能学完。
解题思路:
将每个课程视为一个点,学习顺序变成点与点之间点有向边。
如果这些课程存在环,则不能学完。如果不存在环,则能学完。
生成图,再用DFS进行拓扑排序,最后判定是不是存在环即可。
代码:
class Solution {public: bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { if (numCourses == 0 || prerequisites.empty()) return true; graph = vector<vector<int> >(numCourses); vis = vector<int>(numCourses, 0); for (auto i : prerequisites) { graph[i.second].push_back(i.first); } for (int u = 0; u < numCourses; ++u) { if (0 == vis[u] && !dfs(u)) return false; } return true; }private: vector<vector<int> > graph; vector<int> vis; bool dfs(int u) { vis[u] = 1; for (auto v : graph[u]) { if (vis[v] == 1) return false; if (dfs(v) == false) return false; } vis[u] = 2; return true; };};
0 0
- 算法课第四周作业 | Course Schedule
- 第四周:[Leetcode]207. Course Schedule
- 第四周:[Leetcode]210. Course Schedule II
- 算法课第十八周作业 | Course Schedule II
- 算法第四周作业
- 第四周算法作业
- 普林斯顿算法课第四周作业
- 算法课第3周第2题——207. Course Schedule
- 2017算法课.14(Course Schedule)
- 第四周作业 算法概论
- 算法第四周作业01
- 算法第四周作业02
- 算法:LeetCode207 Course Schedule
- 【算法】【Graph】Course Schedule
- 第四周:210. Course Schedule II(课程清单之二)
- LeetCode算法题目:Course Schedule
- 算法作业_7(2017.3.16第四周)
- 算法作业_8(2017.3.19第四周)
- 《ACM程序设计》书中题目--problem w
- RecyclerView的观察者模式
- java学习笔记-07
- SDUST 第二次实验
- 网络基础
- 算法课第四周作业 | Course Schedule
- LeetCode
- 蓝桥杯 PREV-22国王的烦恼
- repr,eval,exec,str区别
- c语言&妙用
- L1-030. 一帮一
- 并查集
- 梦想的起点
- PhotoView+viewpager+Picasso+glide