博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Topological Sort
阅读量:6867 次
发布时间:2019-06-26

本文共 1854 字,大约阅读时间需要 6 分钟。

DFS:

class Solution {public:    vector
res; bool detectedCycle = false; vector
findOrder(int n, vector
>& pres) { if (n < 1) return res; vector
> v(n); for (const auto& p : pres) v[p.second].insert(p.first); vector
visited(n, -1); for (int i = 0; i < n; i++) dfs(v, visited, i); reverse(res.begin(), res.end()); // result in reverse order return detectedCycle ? vector
() : res; } void dfs(vector
>& v, vector
& visited, int n) { if (detectedCycle || visited[n] != -1) return; visited[n] = 1; for (int i : v[n]) { if (visited[i] == 1) detectedCycle = true; else if (visited[i] == 2) continue; else dfs(v, visited, i); } visited[n] = 2; res.push_back(n); // push current node to the end, and final result is in reverse order. }};

Topological sort:

class Solution {public:    vector
findOrder(int n, vector
>& pres) { vector
res; if (n < 1) return res; vector
> v(n); vector
d(n, 0); // in-degree of each node for (const auto& p : pres) { v[p.second].insert(p.first); d[p.first]++; } for (int k = 0; k < n; k++) { int cur = 0; // find a v which indegree is 0, then we can delete it while (cur < n && d[cur] != 0) cur++; if (cur == n) { return vector
(); } for (auto nb : v[cur]) d[nb]--; res.push_back(cur); d[cur] = -1; } return res; }};

 

转载于:https://www.cnblogs.com/JTechRoad/p/9001333.html

你可能感兴趣的文章
linux系统管理之四:服务状态
查看>>
VMware View FAQ[一]
查看>>
【原创翻译】布尔值(boolean)
查看>>
三元运算式、lambda表达式、内置函数map、reduce、filter以及yield生成器
查看>>
MySQL分库分表分表后数据的查询(5th)
查看>>
iOS-点击图片放大,再次点击返回原视图 类似查看相册的功能
查看>>
JAVA -- stateless4j StateMachine 使用浅析(二)
查看>>
oracle checkpoint
查看>>
KVM虚拟化开源高可用方案(六)ISCSI ON DRBD搭建及常见故障处理
查看>>
android device related
查看>>
iOS 6 Beta3即将发布,iPhone面板谍照已经曝光
查看>>
hadoop 源码包编译
查看>>
将HTML5 Canvas的内容保存为图片
查看>>
hdu2222 Keywords Search AC自动机
查看>>
网站的架构CS和中间件
查看>>
h5存储的优点
查看>>
Python基础之各种推导式玩法
查看>>
[HNOI/AHOI2017]影魔
查看>>
微信小程序-多级联动
查看>>
Ubuntu配置MYSQL远程连接
查看>>