📅  最后修改于: 2023-12-03 15:41:16.583000             🧑  作者: Mango
DFS(深度优先搜索)是一种遍历图的算法。它从一个顶点开始,沿着一条路径尽可能地往下遍历,直到路径无法继续或达到另一个顶点,然后回溯到之前的点,在尝试下一条路径。这个过程会使每个顶点都被访问一次且仅一次,从而遍历整个图。
以下是一个简单的DFS的示例实现代码,以Python为例:
def dfs(graph, start):
visited = set() # 初始化已访问的节点集合
stack = [start] # 初始化栈
while stack: # 只要栈不为空,就继续遍历
node = stack.pop() # 取出栈顶节点
if node not in visited: # 如果该节点未被访问过
visited.add(node) # 标记为已访问
stack.extend(graph[node] - visited) # 将该节点的未访问邻居(即子节点)入栈
return visited
该代码接收一个代表图的字典类型参数及一个代表起始节点的参数。在算法的主循环中,栈存储了当前附近的未遍历节点,而其中的visited
集合被用于标记已访问的节点。extend
方法用于将其未遍历的邻居节点加入到stack
列表中,并使用集合运算符-
来获得未遍历的节点。
DFS的时间复杂度为 $O(|V|+|E|)$,其中 $|V|$ 表示顶点数,$|E|$ 表示边数。因此,DFS可以在理论上有效地遍历任何无向或有向连通图,并求出图中的所有连通分量。
总之,DFS是一种基本的遍历图的算法,它在许多图相关的问题中都有应用。考虑到在实现DFS时可能存在诸如栈大小的问题,因此要谨慎使用。