深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。这个算法会尽可能深地搜索树的分支。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。
工作原理:
- 访问一个顶点,并标记它为已访问。
- 搜索当前顶点的所有未访问过的相邻顶点,并标记它们为已访问。对于每一个新访问的顶点,递归地执行此步骤。
- 返回并标记该顶点为已探索,然后继续回溯并标记其他未访问过的相邻顶点,直到所有顶点都被访问过。
应用场景:
- 图的遍历
- 拓扑排序
- 求解迷宫问题
- 人工智能中的路径查找
- 编译器中的语法分析
Python实现(基于邻接列表):
python# 使用邻接列表表示图
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
visited = set() # 创建一个集合来存储已访问的节点
def dfs(visited, graph, node):
if node not in visited:
print(node)
visited.add(node)
for neighbour in graph[node]:
dfs(visited, graph, neighbour)
# 从节点'A'开始深度优先搜索
dfs(visited, graph, 'A')
这段代码会按照深度优先搜索的顺序打印出图中的节点。