此篇文章为实现《算法》一书中提到的大部分无向图算法,分为多篇,
即多个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; } }