1. package com.atguigu.graph;
    2. import java.util.ArrayList;
    3. import java.util.Arrays;
    4. /**
    5. * ClassName: <br/>
    6. * Description: <br/>
    7. * Date: 2021-03-04 10:36 <br/>
    8. * @project data_algorithm
    9. * @package com.atguigu.graph
    10. */
    11. public class Graph {
    12. private ArrayList<String> vertexList; // 存储定点集合
    13. private int[][] edges; // 存储图对应的临界矩阵
    14. private int numOfEdges; // 表示变的数目
    15. public static void main(String[] args) {
    16. // 测试一把图是否有创建ok
    17. int n = 5;// 节点的个数
    18. String vertexValue[] = {"A", "B", "C", "D", "E"};
    19. // 创建图对象
    20. Graph graph = new Graph(n);
    21. // 循环添加顶点
    22. for (String value : vertexValue) {
    23. graph.insertVertex(value);
    24. }
    25. // 添加边
    26. graph.insertEdge(0,1,1);// A-B
    27. graph.insertEdge(0,2,1); // A-C
    28. graph.insertEdge(1,2,1); // B-C
    29. graph.insertEdge(1,3,1); // B-D
    30. graph.insertEdge(1,4,1); // B-E
    31. graph.showGraph();
    32. }
    33. // 构造
    34. public Graph(int n) {
    35. // 初始化 矩阵和 vertexList
    36. edges = new int[n][n];
    37. vertexList = new ArrayList<String>();
    38. numOfEdges = 0;
    39. }
    40. // 图中常用的方法
    41. // 返回节点中的个数
    42. public int getNumOfVertex() {
    43. return vertexList.size();
    44. }
    45. // 显示图对应的矩阵
    46. public void showGraph() {
    47. for (int[] link : edges) {
    48. System.out.println(Arrays.toString(link));
    49. }
    50. }
    51. // 得到边的个数
    52. public int getNumOfEdges() {
    53. return numOfEdges;
    54. }
    55. // 返回节点i(下标)对应的数据 0->"A" 1->B 2->C
    56. public String getValueByIndex(int i) {
    57. return vertexList.get(i);
    58. }
    59. // 返回v1和v2的权值
    60. public int getWeight(int v1, int v2) {
    61. return edges[v1][v2];
    62. }
    63. /**
    64. * 插入节点
    65. * @param vertex
    66. */
    67. public void insertVertex(String vertex) {
    68. vertexList.add(vertex);
    69. }
    70. /**
    71. * 添加边
    72. * @param v1 表示点的下标 即 是第几个顶点 "A"="B" "A"->0 "B" ->1
    73. * @param v2 表示第二个顶点的下标
    74. * @param weight 表示他们是用什么关联的 是0还是1
    75. */
    76. public void insertEdge(int v1, int v2, int weight) {
    77. edges[v1][v2] = weight;
    78. edges[v2][v1] = weight;
    79. }
    80. }

    运行结果

    1. [0, 1, 1, 0, 0]
    2. [1, 0, 1, 1, 1]
    3. [1, 1, 0, 0, 0]
    4. [0, 1, 0, 0, 0]
    5. [0, 1, 0, 0, 0]
    6. Process finished with exit code 0