207. Course Schedule ,210. Course Schedule II (拓扑排序,BFS等)
来源:互联网 发布:网络程控电话交换机 编辑:程序博客网 时间:2024/05/01 19:25
207. Course Schedule
题目地址:https://leetcode.com/problems/course-schedule/
求解思路
节点的入度,出度
AOE网的拓扑排序算法
ac代码
class Solution {public: vector<int> in_degree; // 入度 vector<vector<int>> adj_table; //邻接表 int n; bool top(int n) { int num = 0; while (num < n) { int i = 0; while (i < n && in_degree[i] != 0){ i++; } if (i >= n){ return false; } num++; in_degree[i] = -2; // 删除该节点,相应的入度减1 int len = adj_table[i].size(); for (int j = 0; j < len; j++){ in_degree[adj_table[i][j]] --; } } return true; } bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { in_degree = vector<int>(numCourses, 0);//包括孤立点在内,in_degree=0 adj_table.resize(numCourses); vector<pair<int, int>>::iterator it = prerequisites.begin(); while (it != prerequisites.end()) { in_degree[it->second] ++; adj_table[it->first].push_back(it->second); ++it; } return top(numCourses); }};
210. Course Schedule II
题目地址
https://leetcode.com/problems/course-schedule-ii/
求解思路
在上一题基础上,需要求出序列
因为只要求出满足要求的一个解就行了,所以仍然可以按照上题的求解思路
ac代码如下
class Solution {public: vector<int> in_degree; // 入度 vector<vector<int>> adj_table; //邻接表 vector<int> ans; bool flag; bool top(int n) { int num = 0; while (num < n) { int i = 0; while (i < n && in_degree[i] != 0){ i++; } if (i >= n){ return false; } ans.push_back(i); num++; in_degree[i] = -2; // 删除该节点,相应的入度减1 int len = adj_table[i].size(); for (int j = 0; j < len; j++){ in_degree[adj_table[i][j]] --; } } return true; } vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { in_degree = vector<int>(numCourses, 0);//包括孤立点在内,in_degree=0 adj_table.resize(numCourses); vector<pair<int, int>>::iterator it = prerequisites.begin(); while (it != prerequisites.end()) { in_degree[it->second] ++; adj_table[it->first].push_back(it->second); ++it; } vector<int> rs; if (top(numCourses)) { rs.assign(ans.rbegin(), ans.rend()); } return rs; }};
超时,超内存代码
dfs求解,可以得到所有的解,代码超时
class Solution {public: vector<int> in_degree; // 入度 vector<vector<int>> adj_table; //邻接表 int n; vector<int> ans; vector<bool> vis; bool flag; vector<int> rs; void top(int cnt) { if (flag) return; if(cnt > 0) { vector<int> in_d0; int in_len = 0; for (int i = 0; i < n; i++) { if (!vis[i] && in_degree[i] == 0) { in_d0.push_back(i); in_len++; } } if (in_len == 0) { return; } for (int i = 0; i < in_len; i++) { int po = in_d0[i]; int tmp = in_degree[po]; in_degree[po] = -2; // 删除该节点,相应的入度减1 vis[po] = true; int len = adj_table[po].size(); for (int j = 0; j < len; j++){ in_degree[adj_table[po][j]] --; } ans.push_back(po); top(cnt - 1); // 递归 回溯 if (flag) return; int ansLen = ans.size(); if (ansLen == n) { /*for (int k = 0; k < n; k++) cout << ans[k] << " "; cout << endl;*/ flag = true; rs.assign(ans.rbegin(), ans.rend()); return; } ans.pop_back(); in_degree[po] = tmp; vis[po] = false; for (int j = 0; j < len; j++){ in_degree[adj_table[po][j]] ++; } } } return; } vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { in_degree = vector<int>(numCourses, 0);//包括孤立点在内,in_degree=0 adj_table.resize(numCourses); vector<pair<int, int>>::iterator it = prerequisites.begin(); while (it != prerequisites.end()) { in_degree[it->second] ++; adj_table[it->first].push_back(it->second); ++it; } n = numCourses; vis = vector<bool>(numCourses, false); flag = false; top(n); if (flag) return rs; return vector<int>(); }};
0 0
- 207. Course Schedule ,210. Course Schedule II (拓扑排序,BFS等)
- Course Schedule II 拓扑排序
- 210. Course Schedule II 【Medium】 拓扑排序
- 拓扑排序解210. Course Schedule II
- Course Schedule 拓扑排序
- Course Schedule[拓扑排序]
- LeetCode Course Schedule II 拓扑排序
- Leetcode 210 Course Schedule II 拓扑排序
- LeetCode 210. Course Schedule II|图问题.拓扑排序
- leetcode 210. Course Schedule II 拓扑排序 + HashSet
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- 210. Course Schedule II
- Alcatraz Xcode-6.4
- storm trident
- Linux - Gentoo Installation with awesome desktop
- 通知(NSNotification)类的使用
- 输入三个整数,按从小到大顺序输出,用引用做形参
- 207. Course Schedule ,210. Course Schedule II (拓扑排序,BFS等)
- [读评]互联网时代方法论:企业独裁与民主的边界
- 互联网 免费的WebService接口
- SSH三大框架整合后的配置文件详解
- 7 天玩转 ASP.NET MVC — 第 6 天
- 谈谈大数据分析架构
- CSS loading动画插件收集
- 百度贴吧看到的,笑话与哲理 《泰罗奥特曼与佛像》
- CUDA 7.0 ”--default-stream per-thread“ 默认流特性解读