美文网首页
栈和 DFS

栈和 DFS

作者: 程序员小2 | 来源:发表于2020-10-11 16:47 被阅读0次

栈和 DFS

与 BFS 类似,深度优先搜索(DFS)也可用于查找从根结点到目标结点的路径。在本文中,我们提供了示例来解释 DFS 是如何工作的以及栈是如何逐步帮助 DFS 工作的。

示例
我们来看一个例子吧。我们希望通过 DFS 找出从根结点 A 到目标结点 G 的路径。

image.png

洞悉
观看上面的动画后,让我们回答以下问题:

  1. 结点的处理顺序是什么?

在上面的例子中,我们从根结点 A 开始。首先,我们选择结点 B 的路径,并进行回溯,直到我们到达结点 E,我们无法更进一步深入。然后我们回溯到 A 并选择第二条路径到结点 C 。从 C 开始,我们尝试第一条路径到 E 但是 E 已被访问过。所以我们回到 C 并尝试从另一条路径到 F。最后,我们找到了 G。

总的来说,在我们到达最深的结点之后,我们只会回溯并尝试另一条路径。

因此,你在 DFS 中找到的第一条路径并不总是最短的路径。例如,在上面的例子中,我们成功找出了路径 A-> C-> F-> G 并停止了 DFS。但这不是从 A 到 G 的最短路径。

  1. 栈的入栈和退栈顺序是什么?

如上面的动画所示,我们首先将根结点推入到栈中;然后我们尝试第一个邻居 B 并将结点 B 推入到栈中;等等等等。当我们到达最深的结点 E 时,我们需要回溯。当我们回溯时,我们将从栈中弹出最深的结点,这实际上是推入到栈中的最后一个结点。

结点的处理顺序是完全相反的顺序,就像它们被添加到栈中一样,它是后进先出(LIFO)。这就是我们在 DFS 中使用栈的原因。

相关文章

  • 栈和 DFS

    栈和 DFS 与 BFS 类似,深度优先搜索(DFS)也可用于查找从根结点到目标结点的路径。在本文中,我们提供了示...

  • DFS-栈

    递归需要消耗额外的资源,这些资源是:1.递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,...

  • 无向图 图的表示方法:邻接表 dfs和bfs的区别:dfs是用栈,bfs用队列 有向图 有向无环图(DAG): 不...

  • 深度优先和广度优先遍历算法

    DFS深度优先遍历 深度优先遍历结果: DFS递归实现:深度优先需要优先查找子节点,因此需要实现后进先出(栈) 递...

  • DFS(栈)&BFS(队列)

    前言 对树(tree)或者图(graph)而言,深度优先搜索(DFS) 和广度优先搜索(BFS)都是用于遍历或者搜...

  • 数据结构基础--栈和队列

    目录 基本性质 栈和队列的基本操作 双端队列和优先级队列 深度优先遍历(DFS)和广度优先遍历(BFS) 递归函数...

  • 二叉树

    二叉树遍历,非递归 思路 DFS的非递归实现本质上是在协调入栈、出栈和访问,三种操作的顺序。上述统一使得我们不再需...

  • 图的遍历, since 2020.03.07

    Depth-Firth Search(DFS)深度优先搜索: 用栈stack实现,记录每个vertex是否被访问过...

  • Depth First Search

    概述 DFS(Depth First Search) => 深度优先搜索算法 => 递归与回溯,通常隐含了栈的实现...

  • 3.1 树的递归(11)

    方法 树的问题往往采用用递归解决,特定情形下才会用到栈(DFS)和队列(BFS)。 二叉搜索树中序递归遍历即为小到...

网友评论

      本文标题:栈和 DFS

      本文链接:https://www.haomeiwen.com/subject/wcmepktx.html