博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] 拓扑排序
阅读量:6341 次
发布时间:2019-06-22

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

BFS:

1 /** 2  * Definition for Directed graph. 3  * struct DirectedGraphNode { 4  *     int label; 5  *     vector
neighbors; 6 * DirectedGraphNode(int x) : label(x) {}; 7 * }; 8 */ 9 class Solution {10 public:11 /**12 * @param graph: A list of Directed graph node13 * @return: Any topological order for the given graph.14 */15 vector
topSort(vector
graph) {16 // write your code here17 vector
topo;18 unordered_map
degrees = compute_indegree(graph);19 queue
zeros;20 for (auto itr = degrees.begin(); itr != degrees.end(); itr++)21 if ((*itr).second == 0)22 zeros.push((*itr).first);23 while (!zeros.empty()) {24 DirectedGraphNode* zero = zeros.front();25 zeros.pop();26 topo.push_back(zero);27 for (DirectedGraphNode* neigh : zero -> neighbors)28 if (--degrees[neigh] == 0)29 zeros.push(neigh);30 }31 return topo;32 }33 private:34 unordered_map
compute_indegree(vector
& graph) {35 unordered_map
degrees;36 for (DirectedGraphNode* node : graph) {37 if (degrees.find(node) == degrees.end())38 degrees[node] = 0;39 for (DirectedGraphNode* neigh : node -> neighbors)40 degrees[neigh]++;41 }42 return degrees;43 }44 };

DFS:

1 /** 2  * Definition for Directed graph. 3  * struct DirectedGraphNode { 4  *     int label; 5  *     vector
neighbors; 6 * DirectedGraphNode(int x) : label(x) {}; 7 * }; 8 */ 9 class Solution {10 public:11 /**12 * @param graph: A list of Directed graph node13 * @return: Any topological order for the given graph.14 */15 vector
topSort(vector
graph) {16 // write your code here17 vector
topo;18 unordered_set
visited;19 for (DirectedGraphNode* node : graph)20 if (visited.find(node) == visited.end())21 dfs(graph, node, visited, topo);22 reverse(topo.begin(), topo.end());23 return topo;24 }25 private:26 void dfs(vector
& graph, DirectedGraphNode* node, 27 unordered_set
& visited, 28 vector
& topo) {29 visited.insert(node);30 for (DirectedGraphNode* neigh : node -> neighbors)31 if (visited.find(neigh) == visited.end())32 dfs(graph, neigh, visited, topo);33 topo.push_back(node);34 }35 };

 

转载地址:http://lyroa.baihongyu.com/

你可能感兴趣的文章
eclipse html 打开方式
查看>>
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
查看>>
人类投资经理再也无法击败电脑的时代终将到来了...
查看>>
一个最小手势库的实现
查看>>
HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
查看>>
Android支付之支付宝封装类
查看>>
<亲测>CentOS中yum安装ffmpeg
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
查看>>
全智慧的网络:思科十年来最具颠覆性的创新
查看>>
怎样将现有应用迁移到 VMware NSX
查看>>
赛门铁克收购以色列移动安全初创公司Skycure 旨在构建网络安全防御平台
查看>>
《Photoshop蒙版与合成(第2版)》目录—导读
查看>>
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.7节获取线路
查看>>
Spring中 @Autowired标签与 @Resource标签 的区别
查看>>
人工智能凭什么毁灭人类
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>