深度优先搜索(Depth-First Search,DFS)是一种图遍历的算法,它可以用于查找或遍历图中的节点。DFS 从一个起始节点开始,沿着一条路径一直到达最深的节点,然后回溯到前一个节点,再沿着另一条路径继续搜索,直到遍历完整个图。

以下是深度优先搜索的基本思想和步骤:

  1. 选择起始节点: 选择图中的一个节点作为起始节点。
  2. 标记节点: 将起始节点标记为已访问。
  3. 探索邻居节点: 从起始节点开始,选择一个邻居节点,如果这个邻居节点未被访问,则重复步骤2。
  4. 递归深入: 对于已经选择的邻居节点,以它为起始节点,递归地进行深度优先搜索,重复步骤2和步骤3。
  5. 回溯: 当无法继续深入时,回溯到前一个节点,重复步骤3。
  6. 重复过程: 重复以上过程,直到所有可达节点都被访问。

深度优先搜索可以用递归或使用栈来实现。以下是一个使用递归实现深度优先搜索的简单示例,假设图以邻接表的形式表示:

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 在解决图遍历、路径搜索等问题时是一种常用的算法。