Java中实现图的深度优先搜索算法函数
发布时间:2023-08-09 02:34:23
在Java中实现图的深度优先搜索算法,可以通过递归实现。下面是一个基本的实现示例:
import java.util.ArrayList;
import java.util.List;
public class Graph {
private int numVertices; // 图顶点的数量
private List<List<Integer>> adjacencyList; // 存储图的邻接表
public Graph(int numVertices) {
this.numVertices = numVertices;
this.adjacencyList = new ArrayList<>();
for (int i = 0; i < numVertices; i++) {
this.adjacencyList.add(new ArrayList<>());
}
}
public void addEdge(int source, int destination) {
this.adjacencyList.get(source).add(destination);
this.adjacencyList.get(destination).add(source); // 如果是有向图,则不需要这一行
}
public void depthFirstSearch(int startVertex) {
boolean[] visited = new boolean[numVertices];
depthFirstSearchHelper(startVertex, visited);
}
private void depthFirstSearchHelper(int currentVertex, boolean[] visited) {
visited[currentVertex] = true;
System.out.print(currentVertex + " ");
List<Integer> neighbors = adjacencyList.get(currentVertex);
for (int neighbor : neighbors) {
if (!visited[neighbor]) {
depthFirstSearchHelper(neighbor, visited);
}
}
}
public static void main(String[] args) {
Graph graph = new Graph(5);
graph.addEdge(0, 1);
graph.addEdge(0, 2);
graph.addEdge(1, 3);
graph.addEdge(1, 4);
System.out.println("Depth First Traversal (starting from vertex 0):");
graph.depthFirstSearch(0);
}
}
在上面的例子中,首先定义了一个Graph类来表示一个图,其中numVertices表示图中顶点的数量,adjacencyList是一个邻接表用来存储图的连接关系。addEdge方法用于添加边。
depthFirstSearch方法是我们要实现的深度优先搜索算法函数的入口。它需要传入一个起始顶点的索引作为参数,然后创建一个visited数组用来标记顶点是否被访问过。我们在depthFirstSearchHelper方法中递归地访问当前顶点的邻居,并将其设置为已访问,然后继续递归访问未访问过的邻居。这样就可以实现深度优先搜索。
在上面的main方法中,我们创建了一个图,并添加了一些边。然后调用depthFirstSearch方法来执行深度优先搜索。你可以根据自己的需要修改或扩展这个示例。
