数据结构&算法 深度优先遍历
-
深度优先遍历
深度优先搜索(DFS)算法在深度运动中遍历图形,并在任何迭代出现死角时使用堆栈记住要获取的下一个顶点以开始搜索。如上面的示例所示,DFS算法首先从S到A到D到G到E到B,然后到F,最后到C。它采用以下规则。- 规则1 - 访问相邻的未访问顶点。将其标记为已访问。显示它。将其推入堆栈。
- 规则2 - 如果未找到相邻的顶点,则从堆栈中弹出一个顶点。(它将弹出堆栈中没有相邻顶点的所有顶点。)
- 规则3 - 重复规则1和规则2,直到堆栈为空。
遍历 描述 初始化堆栈。 将S标记为已访问,并将其放入堆栈。探索S中所有未访问的相邻节点。我们有三个节点,我们可以选择其中任何一个。对于此示例,我们将按字母顺序选择节点。 将A标记为已访问,并将其放入堆栈。探索来自A的任何未访问的相邻节点。S和D都与A相邻,但是我们仅关注未访问的节点。 访问D并将其标记为已访问并放入堆栈。在这里,我们有B和C节点,它们与D相邻并且都未访问。但是,我们将再次按字母顺序选择。 我们选择B,将其标记为已访问并放入堆栈。在这里B没有任何未访问的相邻节点。因此,我们从堆栈中弹出B。 我们检查堆栈顶部是否返回上一个节点,并检查它是否有未访问的节点。在这里,我们发现D在堆栈的顶部。 只有未访问的邻接节点是从D是C现在。因此,我们访问C,将其标记为已访问并将其放入堆栈。 由于C没有任何未访问的相邻节点,因此我们不断弹出堆栈,直到找到一个具有未访问的相邻节点的节点为止。在这种情况下,没有任何东西,我们一直弹出直到堆栈为空。 -