• Java数据结构教程

深度优先搜索 (DFS)



深度优先搜索 (DFS) 算法以深度优先的方式遍历图,并使用堆栈来记住在任何迭代中遇到死胡同时下一个要开始搜索的顶点。

Depth-first Search

如上例所示,DFS算法首先从S遍历到A,再到D,G,E,B,然后到F,最后到C。它遵循以下规则。

  • 规则1 - 访问相邻的未访问顶点。将其标记为已访问。显示它。将其压入堆栈。

  • 规则2 - 如果找不到相邻顶点,则从堆栈中弹出顶点。(它将弹出堆栈中所有没有相邻顶点的顶点。)

  • 规则3 - 重复规则1和规则2,直到堆栈为空。

步骤 遍历 描述
1 Depth-first Search Step1

初始化堆栈。

2 Depth-first Search Step2

S标记为已访问并将其放入堆栈。探索S的任何未访问的相邻节点。我们有三个节点,我们可以选择其中任何一个。在本例中,我们将按字母顺序选择节点。

3 Depth-first Search Step3

A标记为已访问并将其放入堆栈。探索A的任何未访问的相邻节点。SD都与A相邻,但我们只关心未访问的节点。

4 Depth-first Search Step4

访问D,将其标记为已访问并放入堆栈。这里,我们有BC节点,它们与D相邻,并且都未被访问。但是,我们将再次按字母顺序选择。

5 Depth-first Search Step5

我们选择B,将其标记为已访问并放入堆栈。这里B没有任何未访问的相邻节点。所以,我们将B从堆栈中弹出。

6 Depth-first Search Step6

我们检查堆栈顶部以返回到上一个节点,并检查它是否有任何未访问的节点。在这里,我们发现D位于堆栈的顶部。

7 Depth-first Search Step7

现在,D唯一未访问的相邻节点是C。所以我们访问C,将其标记为已访问并放入堆栈。

广告