深度优先搜索(Depth-First Search,简称DFS)是一种用于遍历或搜索树或图的算法。它沿着树的深度遍历树的节点,直到到达叶子节点为止。

DFS 算法原理

DFS 算法的基本思想是从根节点开始,沿着一条路径一直走到底,如果遇到一个节点没有子节点,则返回到上一个节点,然后沿着另一条路径继续走,直到所有的节点都被访问过。

DFS 算法步骤

  1. 选择一个起点。
  2. 访问起点,并标记为已访问。
  3. 如果起点有未访问的邻接节点,选择一个邻接节点,重复步骤2。
  4. 如果没有未访问的邻接节点,返回到上一个节点,并重复步骤3。
  5. 重复步骤2-4,直到所有的节点都被访问过。

DFS 算法应用

DFS 算法在计算机科学中有着广泛的应用,例如:

  • 图的遍历
  • 查找路径
  • 检测图的连通性
  • 寻找最小生成树

示例

以下是一个使用 Python 实现的 DFS 算法示例:

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

    while stack:
        vertex = stack.pop()
        if vertex not in visited:
            visited.add(vertex)
            print(vertex)
            for neighbor in 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')

运行上述代码,输出结果为:

A
B
D
E
F
C

扩展阅读

DFS 图解