当前位置:   article > 正文

Java数据结构—图(Graph)_java graph

java graph

图(Graph)是由节点(Vertex)和边(Edge)构成的一种数据结构。节点表示图中的元素,边表示节点之间的关系。图可以用于描述许多现实世界中的问题,例如社交网络、路线规划等。

在Java中,可以使用邻接矩阵和邻接表两种方式来创建和表示图。邻接矩阵是一个二维数组,其中每个元素表示两个节点之间是否有边。邻接表则是一个链表数组,其中每个链表表示一个节点连接的其他节点。

下面是使用邻接矩阵创建一个简单的无向图的Java代码示例:

  1. public class Graph {
  2.     private final int numVertices;
  3.     private final boolean[][] adjMatrix;
  4.     public Graph(int numVertices) {
  5.         this.numVertices = numVertices;
  6.         adjMatrix = new boolean[numVertices][numVertices];
  7.     }
  8.     public void addEdge(int i, int j) {
  9.         adjMatrix[i][j] = true;
  10.         adjMatrix[j][i] = true;
  11.     }
  12. }

这里我们定义了一个`Graph`类,其中`numVertices`表示节点数,`adjMatrix`表示邻接矩阵。`addEdge`方法用于在节点`i`和`j`之间添加一条边。

一个使用图的示例是路径查找。假设我们有一个城市地图,其中每个节点代表一个地点,每条边代表两个地点之间的道路。我们可以使用图来表示这个地图,然后使用广度优先搜索或深度优先搜索来查找两个地点之间的最短路径。

以下是一个使用邻接表创建无向图并进行深度优先搜索的Java代码示例:

  1. import java.util.LinkedList;
  2. public class Graph {
  3.     private final int numVertices;
  4.     private final LinkedList<Integer>[] adjList;
  5.     public Graph(int numVertices) {
  6.         this.numVertices = numVertices;
  7.         adjList = new LinkedList[numVertices];
  8.         for (int i = 0; i < numVertices; i++) {
  9.             adjList[i] = new LinkedList<>();
  10.         }
  11.     }
  12.     public void addEdge(int i, int j) {
  13.         adjList[i].add(j);
  14.         adjList[j].add(i);
  15.     }
  16.     public void DFS(int start) {
  17.         boolean[] visited = new boolean[numVertices];
  18.         DFSUtil(start, visited);
  19.     }
  20.     private void DFSUtil(int vertex, boolean[] visited) {
  21.         visited[vertex] = true;
  22.         System.out.print(vertex + " ");
  23.         for (int adj : adjList[vertex]) {
  24.             if (!visited[adj]) {
  25.                 DFSUtil(adj, visited);
  26.             }
  27.         }
  28.     }
  29. }

这里我们定义了一个`Graph`类,其中`numVertices`表示节点数,`adjList`表示邻接表。`addEdge`方法用于在节点`i`和`j`之间添加一条边。`DFS`方法用于进行深度优先搜索,`DFSUtil`是递归的实现方式。

总结:图是由节点和边构成的数据结构,可以用于描述许多现实世界中的问题。在Java中,可以使用邻接矩阵和邻接表两种方式来创建和表示图。使用图的一个示例是路径查找,可以使用广度优先搜索或深度优先搜索来实现。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/408746
推荐阅读
相关标签
  

闽ICP备14008679号