栈和深度优先搜索(DFS)

栈和深度优先搜索(DFS)_第1张图片
如上图:
使用 DFS 找出从根结点 A 到目标结点 G 的路径
步骤如下:
1:从根节点A开始,选择节点B的路径,继续深入,直到E,无法更进一步深入,此时栈内容为ABE
依次退栈EB
2:回溯到A节点,选择第二条路径C入栈,E入栈,但E已被访问过,弹出E,回溯到C节点;选择另一条路径
F入栈,G入栈。此时我们找到了G。此时栈内容(路径)为ACFG

总的来说,在我们到达最深的结点之后,我们只会回溯并尝试另一条路径。
注意:在 DFS 中找到的第一条路径并不总是最短的路径。例如,在上面的例子中,我们成功找出了路径 A-> C-> F-> G 并停止了 DFS。但这不是从 A 到 G 的最短路径。
结点的处理顺序是完全相反的顺序,就像它们被添加到栈中一样,它是后进先出(LIFO)。这就是我们在 DFS 中使用栈的原因。

你可能感兴趣的:(算法,数据结构)