使用DFS进行拓扑排序,如果可以完成的话,输出路径
来源:互联网 发布:淘宝网店推能学会吗 编辑:程序博客网 时间:2024/06/08 16:55
进行深度优先搜索的时候,如果当前访问的点是已经被访问过的节点的话,说明出现了逆边。因此有环,无法完成拓扑排序。
如果可以完成拓扑排序,检测点序列就是一个合法的拓扑排序!
#include <iostream>#include <vector>using namespace std;class Solution { vector<vector<int> > graph; vector<int> visited; vector<int> path; void dispGraph() { for (int i = 0; i < graph.size(); ++i) { cout << i << ": "; for (int j = 0; j < graph[i].size(); ++j) { cout << graph[i][j] << " "; } cout << endl; } } bool dfs(int s) { visited[s] = 1; for (int i = 0; i < graph[s].size(); ++i) { int nextv = graph[s][i]; if (visited[nextv] == 0) { if (dfs(nextv) == false) return false; } else if (visited[nextv] == 1) return false; } visited[s] = 2; path.push_back(s); // 将检测点加入到path中 return true; }public: bool canFinish(int numCourses, vector<pair<int, int> > &prerequisites) { graph = vector<vector<int> >(numCourses, vector<int>()); for (vector<pair<int, int> >::iterator it = prerequisites.begin(); it != prerequisites.end(); ++it) { graph[it->first].push_back(it->second); }// dispGraph(); visited = vector<int>(numCourses, 0); for (int i = 0; i < numCourses; ++i) { if (visited[i] == 0 && dfs(i) == false) { return false; } } cout << "path is : "; for (int i = 0; i < path.size(); ++i) cout << path[i] << " "; cout << endl; return true; }};int main(){ int numCourse, e; cin >> numCourse >> e; vector<pair<int, int> > prerequisites; for (int i = 0; i < e; ++i) { int next, pre; cin >> next >> pre; prerequisites.push_back(make_pair(next, pre)); } cout << Solution().canFinish(numCourse, prerequisites) << endl; return 0;}/*5 60 22 33 40 11 21 3output: path is: 4 3 2 1 015 70 22 33 40 11 21 34 3output: 0*/
阅读全文
0 0
- 使用DFS进行拓扑排序,如果可以完成的话,输出路径
- 拓扑排序输出全部路径
- 热更新如果是android平台的话,可以直接.cs文件到本地,然后使用反射进行加载。 如果是IOS平台的话,就没有办法直接更新.cs文件了,可以使用ULua进行搞定。
- 如果可以重上一遍大学的话
- 拓扑排序+DFS
- poj1128 拓扑排序+DFS
- 拓扑排序-DFS
- DFS,拓扑排序
- 拓扑排序 dfs
- hdoj538Ponds【dfs+拓扑排序】
- POJ1270【拓扑排序+DFS】
- DFS拓扑排序
- 拓扑排序DFS做法
- 拓扑排序--dfs
- 拓扑排序 基于DFS
- UVa 872 Ordering(拓扑排序输出全部路径)
- poj1270 Following Orders (拓扑排序+回溯输出路径)
- poj1128 Frame Stacking (拓扑排序+构图+回溯输出路径)
- 九度 题目1450:产生冠军
- 17.9.16日报
- 下一代的全能广告系统架构【腾讯创新日】
- codewars解题笔记 —— 匹配字符串
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- 使用DFS进行拓扑排序,如果可以完成的话,输出路径
- 深入研究java.lang.Class类
- 为什么对象 属性的refcount=2
- jdbc连接数据库
- PHP面试题
- Apache httpd服务器问题集合
- 2.1 线性表的定义、逻辑结构、基本操作
- PAT 1107. Social Clusters (30) 特殊问题+并查集+数量信息并查集
- 贪心算法