欢迎访问宙启技术站
智能推送

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方法来执行深度优先搜索。你可以根据自己的需要修改或扩展这个示例。