深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。它沿着树的分支一路向下深入,直到到达叶节点,然后再回溯到上一个节点,继续向下搜索。

基本概念

  • 节点:树或图中的每一个点。
  • :连接两个节点的线。
  • 路径:从起点到终点的节点序列。
  • 深度:从一个节点到另一个节点的边的数量。

算法步骤

  1. 选择一个起始节点。
  2. 访问该节点。
  3. 将该节点标记为已访问。
  4. 如果该节点有未访问的邻接节点,选择一个邻接节点作为下一个要访问的节点,并重复步骤2-4。
  5. 如果没有未访问的邻接节点,回溯到上一个节点,并重复步骤4。

代码示例

def dfs(graph, start):
    visited = set()
    stack = [start]

    while stack:
        vertex = stack.pop()
        if vertex not in visited:
            visited.add(vertex)
            print(vertex, end=' ')

            for neighbor in reversed(graph[vertex]):
                if neighbor not in visited:
                    stack.append(neighbor)

graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F'],
    'D': [],
    'E': ['F'],
    'F': []
}

dfs(graph, 'A')

扩展阅读

想要了解更多关于算法的知识,可以访问我们的算法教程页面。

图片

深度优先搜索示例图