• 无向图(1.抽象类实现)


    此篇文章为实现《算法》一书中提到的大部分无向图算法,分为多篇,

    即多个Java文件,可以直接复制,便于学习;

    第一篇,java无向图的抽象类实现,此篇主要列出实现的功能,接口;

    参考链接:https://www.cnblogs.com/xiaohuiduan/p/11352209.html#e5b9bfe5baa6e4bc98e58588e9818de58e86_6

    /**
     * FileName: Graph
     * Author:   Jerry
     * Date:     2020/2/10 19:20
     * Description: 图的抽象数据结构
     */
    package graph;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public abstract class Graph {
        //顶点数量
        int V;
        //边的数量
        int E;
        //邻接表
        List[] adj;
    
        //构造一个含有V个顶点的图,但是不含边
        Graph(int V) {
            adj = new ArrayList[V];
            for (int i = 0; i < V; i++) {
                adj[i] = new ArrayList<Integer>();
            }
            this.V = V;
        }
    
        /**
         * @return 返回顶点的数量
         */
        int V() {
            return V;
        }
    
        /**
         * @return 返回边的数量
         */
        int E() {
            return E;
        }
    
        /**
         * 在图中添加一条边v-w
         *
         * @param v
         * @param w
         */
        abstract void addEdge(int v, int w);
    
        /**
         * 获得与v相邻的所有顶点
         *
         * @param v
         * @return
         */
        abstract Iterable<Integer> adj(int v);
    
        /**
         * 与结点s相连接的所有结点
         *
         * @param s
         * @return
         */
        abstract Iterable<Integer> search(int s);
    
        /**
         * 是否存在s结点到v结点的路径
         *
         * @param s
         * @param v
         * @return
         */
        abstract boolean hasPathTo(int s, int v);
    
        /**
         * 找到s到v的路径
         *
         * @param s
         * @param v
         * @return
         */
        abstract Iterable<Integer> pathTo(int s, int v);
    
        /**
         * @return
         * 便于进行打印
         */
        @Override
        public String toString() {
            String s = "Graph{" +
                    "V=" + V + ",E="
                    + E + "}";
            for (int v = 0; v < V; v++) {
                s += (v + ":");
                for (int w : this.adj(v)) {
                    s += w + " ";
                }
                s += '
    ';
            }
            return s;
        }
    }
    

      

  • 相关阅读:
    linux screen 命令详解
    centos7 安装docker(手动和脚本安装)换源 卸载
    在linux上安装taiga
    阿里云清除云盾
    Vim
    推荐 130 个令你眼前一亮的网站,总有一个用得着
    索引优化分析 2
    Mysql的主存复制 5
    Mysql锁机制 4
    查询获取分析 3
  • 原文地址:https://www.cnblogs.com/AccompanyingLight/p/12294024.html
Copyright © 2020-2023  润新知