• 算法7-8:有向图接口


    有向图和无向图在编程中的表示方法是差点儿相同的,本问介绍邻接表表示方法。


    有向图对象的代码轮廓例如以下:


    public class Digraph {
        public Digraph(int v) {
        }
     
        // 创建v到w的边
        public void addEdge(int v, int w) {
        }
     
        // 获取v能直接到达的顶点
        public Iterable<Integer> adj(int v){
        }
     
        // 获取整张图的顶点数量
        public int V() {
        }
     
        // 获取整张图的边数
        public int E() {
        }
     
        // 将整整图的方向反转
        public Digraph reverse() {
        }
     
        @Override
        public String toString() {
        }
    }


    代码


    这次用邻接表方法进行实现,代码和无向图是差点儿相同的。

    import java.util.LinkedList;
    import java.util.List;
     
    public class Digraph {
        private List<Integer>[] adj;
        private int v;
     
        public Digraph(int v) {
            adj = (List<Integer>[]) new LinkedList[v];
            this.v = v;
        }
     
        // 创建v到w的边
        public void addEdge(int v, int w) {
            adj[v].add(w);
        }
     
        // 获取v能直接到达的顶点
        public Iterable<Integer> adj(int v) {
            return adj[v];
        }
     
        // 获取整张图的顶点数量
        public int V() {
            return v;
        }
     
        // 获取整张图的边数
        public int E() {
            int result = 0;
            for (List<Integer> e : adj) {
                result += e.size();
            }
            return result;
        }
     
        // 将整整图的方向反转
        public Digraph reverse() {
            Digraph G = new Digraph(this.v);
            for (int v = 0; v < this.v; v++) {
                for (int w : adj(v)) {
                    G.addEdge(w, v);
                }
            }
            return G;
        }
     
        @Override
        public String toString() {
            String result = "";
            for (int v = 0; v < this.v; v++) {
                result += v + ":";
                for (int w : adj(v)) {
                    result += " " + w;
                }
                result += "
    ";
            }
            return result;
        }
    }


  • 相关阅读:
    python入门1
    查找字段 和查找组件
    DBGRID 拖动滚动条 和 鼠标滚轮的问题
    数据集 过滤时 RecordCount 属性
    查找字段 如何 过滤
    数据集控件 放在 数据模块 上后,如何写事件代码
    取TTable 过滤后的记录数
    判断 Windows操作系统是32位还是64位
    MatchText MatchStr 区别
    EClassNotFound
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6849627.html
Copyright © 2020-2023  润新知