深さ優先探索(DFS: Depth-First Search)の疑似言語による表現です。グラフや木構造において、あるノードから行き止まりになるまで深く探索し、その後戻って別の枝を探索する手法です。

一般的に、再帰構造を用いた実装が分かりやすいとされています。

1. 再帰による深さ優先探索(標準的)

// グラフ探索の再帰関数
手続き DFS(頂点 v, グラフ G, 訪問済み配列 visited)
    
    // 現在の頂点 v を「訪問済み」にする
    visited[v] = true
    
    // 現在の頂点を処理(例: 出力)
    プリント v
    
    // 頂点 v に隣接するすべての頂点 u について
    各頂点 u in G.隣接頂点リスト(v)
        
        // u が未訪問の場合、再帰的に DFS を呼ぶ
        もし !visited[u] なら
            DFS(u, G, visited)
        終わりもし
        
    次
終了手続き


2. スタック(スタック)を用いた深さ優先探索(非再帰)

再帰を使わず、明示的にスタック構造を用いて実装する方法です。
手続き DFS_Stack(グラフ G, 頂点 start_node) // スタックを準備し、開始ノードを入れる stack = 新しいスタック() stack.push(start_node) // 訪問済み管理用 visited = 新しい配列(全ノード数、falseで初期化) // スタックが空になるまで繰り返す 繰り返し while !stack.isEmpty() // スタックから頂点を取り出す v = stack.pop() // 未訪問なら処理して隣接ノードをスタックに追加 もし !visited[v] なら visited[v] = true プリント v // 隣接頂点をスタックに追加(逆順に積むと再帰DFSと同じ順序になる) 各頂点 u in G.隣接頂点リスト(v) もし !visited[u] なら stack.push(u) 終わりもし 次 終わりもし 繰り返し終了 終了手続き
最終更新日時: 2026年 04月 27日(月曜日) 22:24