实现图的深度优先搜索(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函数的例子。深度优先搜索算法可以用于解决许多图相关的问题,如连通性、路径搜索等。
