

package com.atguigu.graph;import java.util.ArrayList;import java.util.Arrays;/** * 图的简单实现 * * @author Dxkstart * @create 2022-04-11-16:18 */public class Graph { private ArrayList<String> varTextList; // 存储顶点 private int[][] edges; // 存储图对应的邻接矩阵 private int numOfEdges; // 表示边的个数 public static void main(String[] args) { int n = 5;// 节点的个数 String VarTexValue[] = {"A","B","C","D","E"}; // 创建图对象 Graph graph = new Graph(n); // 添加 for (String str : VarTexValue) { graph.add(str); } // 添加边 A-B A-C B-C B-D B-E graph.addEdge(0,1,1); // A-B graph.addEdge(0,2,1); // A-C graph.addEdge(1,2,1); // B-C graph.addEdge(1,3,1); // B-D graph.addEdge(1,4,1); // B-E // 显示图的矩阵 graph.showGraph(); } // 构造器 public Graph(int n) { // 初始化矩阵和varTextList edges = new int[n][n]; varTextList = new ArrayList<String>(n); numOfEdges = 0; } // 插入节点 public void add(String varText) { varTextList.add(varText); } // 添加边 /** * * @param v1 表示点的下标 * @param v2 表示第二个顶点对应的下标 * @param weight 表示边的权值 */ public void addEdge(int v1,int v2,int weight) { edges[v1][v2] = weight; edges[v2][v1] = weight; numOfEdges++; } // 返回节点的个数 public int getNumOfVarText(){ return varTextList.size(); } // 返回边的数目 public int getNumOfEdges(){ return numOfEdges; } // 返回节点i(下标) 对应的数据 public String getValueByIndex(int i) { return varTextList.get(i); } // 返回v1和v2的权值 public int getWeight(int v1,int v2) { return edges[v1][v2]; } // 显示图对应的矩阵 public void showGraph() {// for (int i = 0; i < edges.length; i++) {// for (int j = 0; j < edges.length; j++) {// System.out.println(edges[i][j] + " ");// }// System.out.println();// } for (int[] link : edges) { System.err.println(Arrays.toString(link)); } }}