次に、幅優先検索の標準的な擬似コードを示します。 { 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は、キュー操作であると想定されています。しかし、スタック操作の場合はどうでしょうか?結果のアルゴリズムは、深さ優先順で頂点を訪問しますか? 「これは取るに足らない」というコメントに投票した場合、なぜそれが取るに足らないのかを説明してください。この問題は非常に注意が必要です。
G=(V,E)G=(V,E)G=(V,E)ssstttssstttGGGtttP ⇝ Z V P S R Y のV V S 、R 、Y 、VのP O Vs⇝ts⇝ts \rightsquigarrow tこれが他のパスのサブパスである場合、DFSもこのサブパスを再度通過します。たとえば、からまでのパスの数を見つける必要がある隣接リストを考えます。 ここで、DFSはで始まり、 DFSが正常に実行されないため、ます。 pathは。これはに遭遇するため、頂点色を灰色に変更しないためです。pppvvv posryvzworryvwzsszvposzorsvsrryyvvwzwz\begin{array}{|c|c c c|} \hline p &o &s &z \\ \hline o &r &s &v\\ \hline s &r \\ \hline r &y \\ \hline y &v \\ \hline v &w …