深度优先搜索(Depth-First Search, DFS)是一种用于遍历或搜索树或图的算法。以下是用Java实现DFS算法的一个示例:
示例:图的DFS实现
假设我们有一个无向图,用邻接表来表示图的数据结构
import java.util.*;
// 图的类
class Graph {
private int V; // 顶点的数量
private LinkedList<Integer> adj[]; // 邻接表
// 构造函数
Graph(int v) {
V = v;
adj = new LinkedList[v];
for (int i = 0; i < v; ++i) {
adj[i] = new LinkedList();
}
}
// 添加边
void addEdge(int v, int w) {
adj[v].add(w); // v -> w
adj[w].add(v); // 因为是无向图,w -> v 也要添加
}
// 递归实现DFS
void DFSUtil(int v, boolean visited[]) {
// 将当前顶点标记为已访问并打印它
visited[v] = true;
System.out.print(v + " ");
// 递归访问所有与当前顶点相邻的未访问顶点
for (int n : adj[v]) {
if (!visited[n]) {
DFSUtil(n, visited);
}
}
}
// DFS遍历函数
void DFS(int v) {
// 标记所有顶点为未访问
boolean visited[] = new boolean[V];
// 调用递归的辅助函数来进行DFS
DFSUtil(v, visited);
}
public static void main(String args[]) {
Graph g = new Graph(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
System.out.println("从顶点 2 开始进行DFS遍历:");
g.DFS(2);
}
}
说明
- Graph类:表示图的结构,包含顶点数量和邻接表。
- addEdge方法:用于添加图中的边。
- DFSUtil方法:递归实现DFS算法,用于访问顶点及其邻接顶点。
- DFS方法:用于初始化访问数组并开始DFS遍历。
- main方法:创建图并添加边,最后从指定顶点开始DFS遍历。
上述代码将从顶点2开始进行DFS遍历,并打印访问的顶点。DFS算法的时间复杂度为O(V + E),其中V是顶点数,E是边数。