DFS(Depth-First Search)

DFS,即深度優先搜尋,是一種從起點出發,盡可能深入節點後才回退的搜尋策略。它適合用來探索所有可能的路徑、驗證某條路徑是否存在,或是進行拓樸排序與子結構搜尋等任務。


一、DFS 的核心概念

  • 從根節點開始,優先走到底,再回頭探索其他分支

  • 採用「遞迴」或「堆疊」記錄搜尋路徑

  • 常見於圖與樹的遍歷或完全搜索任務


二、節點結構設計(以樹為例)

class TreeNode:
    def __init__(self, value):
        self.value = value
        self.children = []  # 支援多叉樹

三、DFS 搜尋實作(傳回路徑)

def dfs(node, goal_value, path=None):
    if path is None:
        path = []

    path.append(node)
    print(f"Visiting node: {node.value}")

    if node.value == goal_value:
        return path

    for child in node.children:
        result = dfs(child, goal_value, path[:])
        if result:
            return result

    return None

四、完整範例:樹上的 DFS

可能輸出結果:


五、DFS 特性與適用情境

特性
說明

搜尋策略

儘可能深入節點,無解時才回退

適用資料結構

樹(Tree)、圖(Graph)

典型應用場景

遞迴處理、邊界追蹤、迷宮尋路、組合問題、結構遍歷

實作資料結構

可用遞迴(系統堆疊)或自行管理 Stack 結構

記憶體使用量

與樹的深度成正比,適合層數深但每層節點不多的資料結構


DFS 提供一種靈活的探索方式,能夠快速深入結構底層並適用於路徑驗證、結構分析與邏輯推演。搭配剪枝或狀態紀錄可用於許多 AI、演算法競賽與遞迴型問題中。

Last updated