深さ優先探索
From Wikipedia, the free encyclopedia
擬似コード
再帰あり
function 深さ優先探索(v)
v に訪問済みの印を付ける
v を処理する
for each v に接続している頂点 i do
if i が未訪問 then
深さ優先探索(i)
再帰なし
function 深さ優先探索(v)
S ← 空のスタック
v に訪問済みの印を付ける
v を S に積む
while S が空ではない do
v ← S から取り出す
v を処理する
for each v に接続している頂点 i do
if i が未訪問 then
i に訪問済みの印を付ける
i を S に積む
Pythonでの実装(再帰なし)
以下は、2頂点間の経路を探す例。なお、これを幅優先探索でやると、辺の重みなしの最短経路問題になる。
def depthFirstSearch( start, goal ):
stack = Stack()
start.setVisited()
stack.push( start )
while not stack.empty():
node = stack.top()
if node == goal:
return stack # stack には2頂点間の経路が入っている
else:
child = node.findUnvisitedChild()
if child == none:
stack.pop()
else:
child.setVisited()
stack.push( child )

