深度优先搜索(Depth-First Search,DFS)是一种图遍历的算法,它可以用于查找或遍历图中的节点。DFS 从一个起始节点开始,沿着一条路径一直到达最深的节点,然后回溯到前一个节点,再沿着另一条路径继续搜索,直到遍历完整个图。
以下是深度优先搜索的基本思想和步骤:
- 选择起始节点: 选择图中的一个节点作为起始节点。
- 标记节点: 将起始节点标记为已访问。
- 探索邻居节点: 从起始节点开始,选择一个邻居节点,如果这个邻居节点未被访问,则重复步骤2。
- 递归深入: 对于已经选择的邻居节点,以它为起始节点,递归地进行深度优先搜索,重复步骤2和步骤3。
- 回溯: 当无法继续深入时,回溯到前一个节点,重复步骤3。
- 重复过程: 重复以上过程,直到所有可达节点都被访问。
深度优先搜索可以用递归或使用栈来实现。以下是一个使用递归实现深度优先搜索的简单示例,假设图以邻接表的形式表示:
def dfs(graph, node, visited):
if node not in visited:
print(node, end=' ')
visited.add(node)
for neighbor in graph[node]:
dfs(graph, neighbor, visited)
# 示例图的邻接表表示
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}
# 用于存储已访问节点的集合
visited = set()
# 从起始节点 'A' 开始深度优先搜索
dfs(graph, 'A', visited)
这个示例中,从节点 'A' 开始进行深度优先搜索,最终输出遍历的节点顺序。DFS 在解决图遍历、路径搜索等问题时是一种常用的算法。