FancyKing's WebSite

DFS and BFS


1 . BFS

定义

BFS (Breadth-First-Search) ——广度优先搜索, 是从根节点开始,遍历完毕整张图,不考虑结果所在的位置, 无论如何都要遍历完毕整张地图才终止。 按照就近原则进行, 距离原点相同的节点的访问顺序是相近的。

BFS 的使用范围

几点说明

2 . DFS

定义

DFS (Depth-First-Search)——深度优先搜索,是从根节点开始, 逐个访问每一条路径, 对于具有多子节点的节点而言,先搜索到某一条子路的最深处,再逐个回溯前驱节点。

DFS 使用栈保存未被检测的节点,节点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。

几点说明

DFS 与 BFS的 节点储存方式

在DFS中, 使用 队列储存节点, 而在BFS 中,使用 栈储存节点。原因就在于二者 优先次序的不同。

队列是一种先进先出的数据结构,对于每一个节点而言,每一次搜索,都是优先这一个节点的子节点,所以每一次加入等待序列之后,都要等到某一个节点的所有子节点都被访问完毕, 才可以进行下一个节点的访问,这正好是,先进入等待序列 的节点,先出序列进行计算,而后进入的,则后出,所以使用队列储存。
栈是一种先进后出的数据结构,在DFS中,我们要对每一条路径走到底,才可以回溯前驱节点,所以当节点加入等待序列之后,都要先让后加入的(也就是子节点中的某一个) 节点先进行运算, 以保证是一条路走到底,所以符合栈的设计。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »

因本文不是用Markdown格式的编辑器书写的,转换的页面可能不符合AMP标准。