Topological Sorting
来源:互联网 发布:用sql语句创建表步骤 编辑:程序博客网 时间:2024/05/15 14:43
description:
Given an directed graph, a topological order of the graph nodes is defined as follow:
For each directed edge A -> B in graph, A must before B in the order list.
The first node in the order can be any node in the graph with no nodes direct to it.
Find any topological order for the given graph.
Notice
You can assume that there is at least one topological order in the graph.
Have you met this question in a real interview? Yes
Clarification
Learn more about representation of graphs
Example
For graph as follow:
picture
The topological order can be:
[0, 1, 2, 3, 4, 5]
[0, 2, 3, 1, 5, 4]
…
解题思路:拓扑排序是一种非常常考的问题,主要是维持indegree和outdegree,当indegree == 0 是说明该点是当前的起点。
(1)首先从所给定的graph中找到除起点外的所有点并确定indegree。
(2)建立queue,将起点放到queue中
(3)使用经典的bfs方法将该层的点一一找到,然后按照neighbors的方式将 indegree - 1,找到下一个indegree == 0的点
/** * 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<>(); HashMap<DirectedGraphNode, Integer> map = new HashMap<>(); Queue<DirectedGraphNode> queue = new LinkedList<>(); for (DirectedGraphNode node : graph) { for (DirectedGraphNode neighbor : node.neighbors) { if (map.containsKey(neighbor)) { map.put(neighbor, map.get(neighbor) + 1); } else { map.put(neighbor, 1); } } } for (DirectedGraphNode node : graph) { if (!map.containsKey(node)) { queue.offer(node); result.add(node); } } while (!queue.isEmpty()) { DirectedGraphNode node = queue.poll(); for (DirectedGraphNode neighbor : node.neighbors) { if (map.containsKey(neighbor)) { map.put(neighbor, map.get(neighbor) - 1); if (map.get(neighbor) == 0) { queue.offer(neighbor); result.add(neighbor); } } } } return result; }}
- 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
- 即使不跳槽,你也应该做的三件事情
- pwnable.kr [Toddler's Bottle]
- 从今天开始,我要努力学习!
- [code static]SQL基础语法
- 使用python进行图像处理
- Topological Sorting
- [LeetCode]475. Heaters
- 常见的动态规划问题分析与求解
- iframe的低边会留白的处理
- View的工作流程---Measure过程
- 3月23
- [code static]Go基础语法
- iOS原生OPENGL之贴图
- Android 自定义控件原理