lintcode(127)拓扑排序
来源:互联网 发布:mssql数据库备份分离 编辑:程序博客网 时间:2024/05/17 01:35
Description:
给定一个有向图,图节点的拓扑排序被定义为:
- 对于每条有向边A--> B,则A必须排在B之前
- 拓扑排序的第一个节点可以是任何在图中没有其他节点指向它的节点
找到给定图的任一拓扑排序
Explanation:
对于下列图:
这个图的拓扑排序可能是:
[0, 1, 2, 3, 4, 5]
或者
[0, 2, 3, 1, 5, 4]
或者
....
Solution:
BFS.Go through the graph to record the node and its preNodes in a hash map. If the list of one node's preNodes is null, push it to the result, and then remove it from the graph and the list of preNodes of other nodes. Repeat until the graph is null.
/** * Definition for Directed graph. * class DirectedGraphNode { * int label; * ArrayList<DirectedGraphNode> neighbors; * DirectedGraphNode(int x) { label = x; neighbors = new ArrayList<DirectedGraphNode>(); } * }; */public class Solution { /** * @param graph: A list of Directed graph node * @return: Any topological order for the given graph. */ public ArrayList<DirectedGraphNode> topSort(ArrayList<DirectedGraphNode> graph) { // write your code here ArrayList<DirectedGraphNode> result = new ArrayList<DirectedGraphNode>(); if(graph == null || graph.size() == 0){ return result; } HashMap<DirectedGraphNode , HashSet<DirectedGraphNode>> record = new HashMap<DirectedGraphNode , HashSet<DirectedGraphNode>>(); for(DirectedGraphNode temp : graph){ record.put(temp , new HashSet<DirectedGraphNode>()); } for(DirectedGraphNode temp : graph){ for(DirectedGraphNode neighbor : temp.neighbors){ record.get(neighbor).add(temp); } } while(graph.size() > 0){ for(int i = 0;i<graph.size();i++){ DirectedGraphNode temp = graph.get(i); if(record.get(temp).size() == 0){ result.add(temp); graph.remove(temp); for(DirectedGraphNode node : graph){ if(record.get(node).contains(temp)){ record.get(node).remove(temp); } } } } } return result; }}
阅读全文
0 0
- lintcode-拓扑排序-127
- LintCode 127-拓扑排序
- lintcode(127)拓扑排序
- LintCode-拓扑排序
- 拓扑排序-LintCode
- Lintcode 拓扑排序
- LintCode 解题记录 17.10.14 拓扑排序
- Lintcode:拓扑排序(深度优先搜索,广度优先搜索)
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- GRFC (generic rf control)
- B树在存储中的作用和优点
- inno setup打包工具脚本
- 快速排序法 java实现 三种方法实现
- 开发问题笔记
- lintcode(127)拓扑排序
- android studio 导入module作为lib使用
- Android初级教程
- Eclipse Gradle插件相关快捷键
- 大型项目架构演进过程及思考的点
- <模型汇总_9> 深度学习网络的表达方式汇总及模型分类方法
- Android架构之项目组件化实战
- 在Ubuntu中安装Redis,设置密码,远程访问
- 微信小程序 生命周期函数