zoukankan      html  css  js  c++  java
  • 拓扑排序

    拓扑排序代码:

    public class Topological {
        private Iterable<Integer> order;  // topological order
        private int[] rank;               // rank[v] = rank of vertex v in order
    
        public Topological(Digraph G) {
            DirectedCycle finder = new DirectedCycle(G);
            if (!finder.hasCycle()) {
                DepthFirstOrder dfs = new DepthFirstOrder(G);
                order = dfs.reversePost();//顶点的拓扑排序
                rank = new int[G.V()];
                int i = 0;
                for (int v : order)
                    rank[v] = i++;
            }
        }
    
    
        public Topological(EdgeWeightedDigraph G) {
            EdgeWeightedDirectedCycle finder = new EdgeWeightedDirectedCycle(G);
            if (!finder.hasCycle()) {
                DepthFirstOrder dfs = new DepthFirstOrder(G);
                order = dfs.reversePost();
            }
        }
    
    
        public Iterable<Integer> order() {
            return order;
        }
    
    
        public boolean hasOrder() {
            return order != null;
        }
    
    
        @Deprecated
        public boolean isDAG() {
            return hasOrder();
        }
    
    
        public int rank(int v) {
            validateVertex(v);
            if (hasOrder()) return rank[v];
            else            return -1;
        }
    
        // throw an IllegalArgumentException unless {@code 0 <= v < V}
        private void validateVertex(int v) {
            int V = rank.length;
            if (v < 0 || v >= V)
                throw new IllegalArgumentException("vertex " + v + " is not between 0 and " + (V-1));
        }
    
    
        public static void main(String[] args) {
            String filename  = args[0];
            String delimiter = args[1];
            SymbolDigraph sg = new SymbolDigraph(filename, delimiter);
            Topological topological = new Topological(sg.digraph());
            for (int v : topological.order()) {
                StdOut.println(sg.nameOf(v));
            }
        }
    
    }
  • 相关阅读:
    第04组(64) 团队展示
    结对编程作业
    第一次个人编程作业
    寒假第二份大礼包
    热身礼包初体验,欢欢喜喜过大年
    第08组 Beta冲刺 (1/5)
    第08组 Alpha冲刺 总结
    第五次作业
    第08组 Alpha冲刺 (6/6)
    第08组 Alpha冲刺 (5/6)
  • 原文地址:https://www.cnblogs.com/hequnwang/p/14307951.html
Copyright © 2011-2022 走看看