次に、幅優先検索の標準的な擬似コードを示します。
{ seen(x) is false for all x at this point }
push(q, x0)
seen(x0) := true
while (!empty(q))
x := pop(q)
visit(x)
for each y reachable from x by one edge
if not seen(y)
push(q, y)
seen(y) := true
ここpush
でpop
は、キュー操作であると想定されています。しかし、スタック操作の場合はどうでしょうか?結果のアルゴリズムは、深さ優先順で頂点を訪問しますか?
「これは取るに足らない」というコメントに投票した場合、なぜそれが取るに足らないのかを説明してください。この問題は非常に注意が必要です。
5
学生がこれに苦労しているのを見てきたので、それが厳密に単純すぎるとは思わない。しかし、答えには「はい」または「いいえ」以上のものを含める必要がありますか?目的の粒度は質問から明らかではありません。
—
ラファエル
「はい」には説得力のある議論が伴います。「いいえ」には反例があります。しかし、何が起こっているかを理解したら、yes / noよりも良い答えがあります
—
...-rgrig
@ジョー、デイブ:次のメタディスカッション
—
ジル「SO-悪であるのをやめ
擬似コードを記述し
—
ジョー
pop
て、スタックまたはキュー操作に変更するだけで、dfsまたはbfsを取得することができます。また、最初はこれが真実であると思われる擬似コードを書くのは簡単ですが、そうではありません。 ics.uci.edu//~eppstein/161/960215.html は関連するリファレンスです。