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

实现图的深度优先搜索(DFS)算法的Java函数

发布时间:2023-12-04 02:56:03

深度优先搜索(DFS)是一种用于图遍历的算法,它从图的某个顶点开始,沿着一条路径访问未被访问过的顶点,直到不可进一步访问为止,然后返回到上一个顶点,继续访问其他未被访问的顶点,直到遍历完所有顶点。

下面是一个实现图的深度优先搜索算法的Java函数:


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

// 图的顶点类
class Vertex {
    int val;
    List<Vertex> neighbors;

    Vertex(int val) {
        this.val = val;
        neighbors = new ArrayList<>();
    }
}

public class DepthFirstSearch {

    // 深度优先搜索函数
    public void dfs(Vertex start, boolean[] visited) {
        // 访问当前顶点
        System.out.print(start.val + " ");
        visited[start.val] = true;

        // 遍历当前顶点的邻居顶点
        for (Vertex neighbor : start.neighbors) {
            // 如果邻居顶点未被访问,则进行递归访问
            if (!visited[neighbor.val]) {
                dfs(neighbor, visited);
            }
        }
    }

    public static void main(String[] args) {
        // 创建一个示例图
        Vertex v1 = new Vertex(1);
        Vertex v2 = new Vertex(2);
        Vertex v3 = new Vertex(3);
        Vertex v4 = new Vertex(4);
        Vertex v5 = new Vertex(5);

        v1.neighbors.add(v2);
        v1.neighbors.add(v3);
        v2.neighbors.add(v4);
        v3.neighbors.add(v4);
        v4.neighbors.add(v5);

        DepthFirstSearch dfs = new DepthFirstSearch();
        boolean[] visited = new boolean[6];

        // 从顶点v1开始进行深度优先搜索
        dfs.dfs(v1, visited);
    }
}

上述代码中,Vertex类表示图的顶点,包含一个整数值和一个邻居顶点列表。DepthFirstSearch类包含一个深度优先搜索函数dfs,以及一个示例图的创建和搜索的main方法。

dfs函数中,我们首先访问当前顶点start,将其设为已访问状态,并输出其值。然后,递归地访问当前顶点的所有邻居顶点,如果邻居顶点未被访问过,则继续深度优先搜索。算法的终止条件是所有顶点都被访问过。

main方法中,我们创建一个简单的示例图,并调用dfs函数进行深度优先搜索。visited数组用于记录每个顶点的访问状态,初始时都设置为false。

执行上述代码,输出结果为1 2 4 5 3,表示深度优先搜索按照顶点的顺序访问了图中的顶点。

以上就是一个实现图的深度优先搜索算法的Java函数的例子。深度优先搜索算法可以用于解决许多图相关的问题,如连通性、路径搜索等。