Topological Sorting
来源:互联网 发布:柳州阿佳希软件 编辑:程序博客网 时间:2024/06/06 14:15
图的拓扑排序,这也是给自己补上一课。
参考点击打开链接
用的是bfs来处理的。
有三个循环,
第一个是将所有有父节点的节点放进map中,并对每一个节点保存其父节点的个数;
第二个将将没有父节点的节点放进results和queue中,这些节点就是根节点,即拓扑的开端,
第三个依次将每个有父节点的节点中保存的父节点个数不断减1,清0,注意自己清0的错误
这个过程能保证顺序的
/** * @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> results = new ArrayList<>(); if (graph == null) { return results; } Map<DirectedGraphNode, Integer> map = new HashMap<>(); for (DirectedGraphNode node: graph) { for (DirectedGraphNode neighborNode: node.neighbors) { if (map.containsKey(neighborNode)) { map.put(neighborNode, map.get(neighborNode) + 1); } else { map.put(neighborNode, 1); } } } Queue<DirectedGraphNode> queue = new LinkedList<>(); for (DirectedGraphNode node: graph) { if (!map.containsKey(node)) { queue.offer(node); results.add(node); } } while (!queue.isEmpty()) { DirectedGraphNode node = queue.poll(); for (DirectedGraphNode neighborNode: node.neighbors) { map.put(neighborNode, map.get(neighborNode) - 1); if (map.get(neighborNode) == 0) { queue.offer(neighborNode); results.add(neighborNode); } // int num = map.get(neighborNode); // if (num != 0) { // map.put(neighborNode, num - 1); // } else { // queue.offer(neighborNode); // results.add(neighborNode); // } } } return results; }
0 0
- Topological sorting
- Topological sorting
- Topological Sorting
- Topological Sorting
- Topological Sorting
- Topological Sorting
- Topological Sorting
- Ural 1280. Topological Sorting
- ural 1280. Topological Sorting
- ural 1280Topological Sorting
- timus 1280 Topological Sorting
- [Random Coding]Topological Sorting
- Lintcode - Topological Sorting
- ural 1280. Topological Sorting
- [刷题]Topological Sorting
- URAL 1280 Topological Sorting
- lintcode:Topological Sorting
- lintcode:Topological Sorting
- oc学习第一天
- docker 存储模式 aufs改device mapper
- 二、c++复合类型
- Java并发编程:Lock
- 1.JavaWeb开发环境搭建(eclipse和tomcat)
- Topological Sorting
- 排序(一)之冒泡排序Bubble Sort
- [JZOJ 3422] 水叮当的舞步
- Android插件的Gradle基础
- 循环输入问题
- leetcode 169. Majority Element
- XSL-FO
- linux文件权限和访问模式
- 练习三 Problem W