DFS 和BFS

本文介绍了广度优先搜索(BFS)和深度优先搜索(DFS)两种图遍历算法。BFS利用队列实现,适用于寻找单一最短路径,如湖面涟漪般逐层扩展;而DFS利用递归,适合找所有解,其过程如同不撞南墙不回头。BFS在空间效率上较低,但能快速找到最优解,DFS则需高效剪枝以节省空间。树和图的遍历实例展示了两种算法的不同行为。
摘要由CSDN通过智能技术生成

广度优先搜索算法(Breadth-First-Search,缩写为 BFS),是一种利用队列实现的搜索算法。简单来说,其搜索过程和 “湖面丢进一块石头激起层层涟漪” 类似。适用于找到最优解。

深度优先搜索算法(Depth-First-Search,缩写为 DFS),是一种利用递归实现的搜索算法。简单来说,其搜索过程和 “不撞南墙不回头” 类似。适用于找所有解。

BFS 的重点在于队列,而 DFS 的重点在于递归。这是它们的本质区别。

BFS 常用于找单一的最短路线,它的特点是 "搜到就是最优解",

而 DFS 用于找所有解的问题,它的空间效率高,而且找到的不一定是最优解,必须记录并完成整个搜索,故一般情况下,深搜需要非常高效的剪枝(剪枝的概念请百度)。

树的遍历:

BFS:A   B C D  E F  G  H I

DFS:  A B  C E  F  D G H  I

 

图的遍历

从A出发

BFS:A  B  C  D  E  F (其中一种)

DFS:A  B  D  F  E  C (其中一种)

BFS: 队列(先进先出)

 

步骤:1、首先A入队列,

            2、A出队列时,A的邻接结点B,C相应进入队列 

            3、B出队列时,B的邻接结点A,C,D中未进过队列的D进入队列

            4、C出队列时,C的邻接结点A,B,D,E中未进过队列的E进入队列

            5、D出队列时,D的邻接结点B,C,E,F中未进过队列的F进入队列

            6、E出队列,没有结点可再进队列

            7、F出队列


DFS:栈(先进后出)

步骤:1、首先A入栈,

            2、A出栈时,A的邻接结点B,C相应入栈  (这里假设C在下,B在上)

            3、B出栈时,B的邻接结点A,C,D中未进过栈的D入栈

            4、D出栈时,D的邻接结点B,C,E,F中未进过栈的E、F入栈(假设E在下,F在上)

            5、F出栈时,F没有邻接结点可入栈

            6、E出栈,E的邻接结点C,D已入过栈

            7、C出栈


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值