拓撲排序演算法
阿新 • • 發佈:2022-05-09
有向圖,無環, 有入度為零 的 點
- 先看哪個點是入度為0的點 比如A
- 然後把 以 A出發的 路徑叉掉
- 找下一個入度為0的點 。 重複操作
public static void sortedTopology(Graph graph) { // 拓撲排序 // 儲存 節點剩餘的入度 HashMap<Node, Integer> inMap = new HashMap<>(); // 儲存 入度為0 的節點 的佇列 LinkedList<Node> zeroInQueue = new LinkedList<>(); for (Node node : graph.nodes.values()) { inMap.put(node, node.in); if (node.in == 0) { zeroInQueue.add(node); } } // 儲存排序結果 List<Node> result = new ArrayList<>(); while(!zeroInQueue.isEmpty()){ Node cur = zeroInQueue.poll(); result.add(cur); for(Node next : cur.nexts){ // 修改 以當前節點 出發的路徑 的 節點 的入度 inMap.put(next, inMap.get(next) - 1); // 如果當前節點的入度為0,也加入 zeroInQueue if(inMap.get(next) == 0){ zeroInQueue.add(next); } } } }