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

深度优先搜索算法的实现方法(java)

发布时间:2023-06-30 00:17:59

深度优先搜索(DFS)是一种用于遍历或搜索图或树的算法。它从起始点开始,将其标记为已访问,并递归地访问它的邻居节点,直到达到没有未访问邻居的节点为止。然后,回溯到上一个节点,继续访问其他未访问的邻居节点。这种方式可以确保图或树中的每个节点都被访问一次。

下面是深度优先搜索算法的实现方法(Java):

import java.util.ArrayList;
import java.util.List;

public class DepthFirstSearch {
    private int vertices; // 图的顶点数量
    private List<List<Integer>> adjacencyList; // 存储图的邻接表

    public DepthFirstSearch(int vertices) {
        this.vertices = vertices;
        adjacencyList = new ArrayList<>(vertices);
        for (int i = 0; i < vertices; i++) {
            adjacencyList.add(new ArrayList<>());
        }
    }

    public void addEdge(int source, int destination) {
        adjacencyList.get(source).add(destination);
    }

    public void DFS(int startVertex) {
        boolean[] visited = new boolean[vertices]; // 记录节点是否被访问过
        System.out.println("深度优先搜索结果:");
        DFSUtil(startVertex, visited);
        System.out.println();
    }

    private void DFSUtil(int vertex, boolean[] visited) {
        visited[vertex] = true;
        System.out.print(vertex + " ");

        // 递归访问邻居节点
        for (int neighbor : adjacencyList.get(vertex)) {
            if (!visited[neighbor]) {
                DFSUtil(neighbor, visited);
            }
        }
    }

    public static void main(String[] args) {
        DepthFirstSearch graph = new DepthFirstSearch(5); // 创建一个图对象
        graph.addEdge(0, 1); // 添加边
        graph.addEdge(0, 2);
        graph.addEdge(1, 3);
        graph.addEdge(2, 4);
        graph.addEdge(3, 4);

        graph.DFS(0); // 从节点0开始进行深度优先搜索
    }
}

以上代码中,DepthFirstSearch 类用于表示图,addEdge 方法用于添加边,DFS 方法用于开始深度优先搜索,DFSUtil 方法用于递归地访问邻居节点。

main 方法中,我们创建了一个图,并添加了边。然后,我们调用 DFS 方法从节点0开始进行深度优先搜索,并输出结果。

以上是深度优先搜索算法的 Java 实现方法。此算法可以用于解决许多与图和树相关的问题,例如寻找连通组件、解决迷宫问题以及生成树等。