深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。这种算法会尽可能深地搜索树的分支。当节点v的所有边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这个过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。
定义
深度优先搜索是一种先深度后广度的遍历算法,它沿着树的深度遍历树的节点,尽可能深地搜索树的分支。
原理
深度优先搜索的原理可以概括为以下几个步骤:
- 从根节点开始,将根节点标记为已访问。
- 遍历根节点的所有未访问的邻接节点,对每一个邻接节点:
a. 标记该节点为已访问。
b. 递归地执行深度优先搜索。 - 如果所有邻接节点都被访问过,回溯到上一个节点,继续执行步骤2,直到所有节点都被访问过。
用途
深度优先搜索算法有多种用途,包括但不限于:
- 查找图中的路径或连通性。
- 拓扑排序。
- 检测图中是否有环。
- 寻找图中的桥或割点。
Python Demo
下面是一个使用深度优先搜索算法遍历树的Python示例。
# 使用递归实现的深度优先搜索
def dfs_recursive(graph, node, visited):
if node not in visited:
print(node, end=