深度优先算法(Depth-First Search,DFS)是一种遍历图或树的算法,其思想是从初始节点开始,从该节点深入到尽头,然后按照回溯的顺序依次访问其他节点。DFS 通常使用递归或栈的方式实现,其时间复杂度为 O(V + E),其中 V 表示节点个数,E 表示边数。
以下是一个基于递归实现的深度优先算法示例:
public void dfs(int node, boolean[] visited, List<Integer>[] graph) {
visited[node] = true; // 标记当前节点已访问
System.out.print(node + " "); // 输出当前节点的值
// 遍历当前节点的所有相邻节点
for (int adj : graph[node]) {
if (!visited[adj]) { // 如果相邻节点未被访问过,则递归访问它
dfs(adj, visited, graph);
}
}
}
其中,node
表示当前节点的编号,visited
数组用于记录节点是否已被访问,graph
是一个邻接表表示的图。在进入递归前,我们先将当前节点标记已访问,并输出节点的值。然后,遍历当前节点的所有相邻节点,如果该节点未被访问过,则递归访问它。通过递归实现,DFS 可以很容易地遍历整个图或树。