image.png

    image.png

    1. package com.atguigu.graph;
    2. import java.util.ArrayList;
    3. import java.util.Arrays;
    4. /**
    5. * 图的简单实现
    6. *
    7. * @author Dxkstart
    8. * @create 2022-04-11-16:18
    9. */
    10. public class Graph {
    11. private ArrayList<String> varTextList; // 存储顶点
    12. private int[][] edges; // 存储图对应的邻接矩阵
    13. private int numOfEdges; // 表示边的个数
    14. public static void main(String[] args) {
    15. int n = 5;// 节点的个数
    16. String VarTexValue[] = {"A","B","C","D","E"};
    17. // 创建图对象
    18. Graph graph = new Graph(n);
    19. // 添加
    20. for (String str : VarTexValue) {
    21. graph.add(str);
    22. }
    23. // 添加边 A-B A-C B-C B-D B-E
    24. graph.addEdge(0,1,1); // A-B
    25. graph.addEdge(0,2,1); // A-C
    26. graph.addEdge(1,2,1); // B-C
    27. graph.addEdge(1,3,1); // B-D
    28. graph.addEdge(1,4,1); // B-E
    29. // 显示图的矩阵
    30. graph.showGraph();
    31. }
    32. // 构造器
    33. public Graph(int n) {
    34. // 初始化矩阵和varTextList
    35. edges = new int[n][n];
    36. varTextList = new ArrayList<String>(n);
    37. numOfEdges = 0;
    38. }
    39. // 插入节点
    40. public void add(String varText) {
    41. varTextList.add(varText);
    42. }
    43. // 添加边
    44. /**
    45. *
    46. * @param v1 表示点的下标
    47. * @param v2 表示第二个顶点对应的下标
    48. * @param weight 表示边的权值
    49. */
    50. public void addEdge(int v1,int v2,int weight) {
    51. edges[v1][v2] = weight;
    52. edges[v2][v1] = weight;
    53. numOfEdges++;
    54. }
    55. // 返回节点的个数
    56. public int getNumOfVarText(){
    57. return varTextList.size();
    58. }
    59. // 返回边的数目
    60. public int getNumOfEdges(){
    61. return numOfEdges;
    62. }
    63. // 返回节点i(下标) 对应的数据
    64. public String getValueByIndex(int i) {
    65. return varTextList.get(i);
    66. }
    67. // 返回v1和v2的权值
    68. public int getWeight(int v1,int v2) {
    69. return edges[v1][v2];
    70. }
    71. // 显示图对应的矩阵
    72. public void showGraph() {
    73. // for (int i = 0; i < edges.length; i++) {
    74. // for (int j = 0; j < edges.length; j++) {
    75. // System.out.println(edges[i][j] + " ");
    76. // }
    77. // System.out.println();
    78. // }
    79. for (int[] link : edges) {
    80. System.err.println(Arrays.toString(link));
    81. }
    82. }
    83. }