在计算机应用中,我们把一系列相连接的节点组成的数据结构,叫做图。今天我们将要介绍它的一种形式——无向图,以及针对这种结构的深度优先搜索和路径查找算法。
一、无向图数据结构
接口:
/** * 图论接口 */public interface Graph { /** * 顶点数 * * @return */ int vertexNum(); /** * 边数 * * @return */ int edgeNum(); /** * 向图中添加一条v-w的边 * * @param v * @param w */ void addEdge(int v, int w); /** * 和v相邻的所有顶点 * * @param v * @return */ Iterable<Integer> adjoin(int v); /** * v的维度 * * @param v * @return */ int degree(int v); }
实现类:
public class Graph implements algorithms.graphs.ifs.Graph { private final int vertex; // 顶点 private int edge; // 边 private ArrayList<Integer>[] adj; public Graph(int v) { this.vertex = v; this.edge = 0; adj = (ArrayList<Integer>[]) new ArrayList[v]; for (int i = 0; i < v; i++) { adj[i] = new ArrayList<>(); } } @Override public int

