C/C++ 之 广度优先搜索

本文介绍了C/C++中的广度优先搜索(BFS)算法,对比了BFS与深度优先搜索(DFS)的区别,并通过实例解析BFS的思路和优势。文章还提供了BFS和DFS的代码模板,帮助读者更好地理解和应用这两种搜索算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

广搜

(下面有投票 ; 小声BB

看到这个词,你第一个想到的应该就是  深搜  了

没有了解过深搜的同学们, 强烈  建议  你去看一下

跳转:C/C++ 之 深搜 与 回溯_MWYA的博客-CSDN博客

然后剩下的同学们,你们  有幸  能看到这篇博客

接下来我们讲一讲  广搜  ;

先看一张图:

如果红色方格是起点,蓝色是终点;

那么从红色方格搜索到蓝色方格,大家第一个想到的一定是  深搜  ;

可是 , 在小范围内 ,  有 没有(小心语病)   比深搜更快的搜索方式吗?

答案肯定是

没有的;

但是,推理一下,如果没有的话,还会有这篇博客吗?

还会有  广搜  这个奇妙 , 费解  的算法吗?

答案是:你想多了;

现在我们看一下真正的广搜的例子;

还是先看一张图:

什么?你说很熟悉?

不不不,世界上没有完全一样的东西,所以:

从红色方格到蓝色方格,用深搜的思路

一条路走下去;

如果走不到,就返回上一个岔口(节点)(分支点);

然后再一条路摸黑走下去;

再返回,直到找到到蓝色方格的正确的路;

反观广搜,最短路径里,明显要比深搜思路更加清晰,时间复杂度更低;

但是

代码也更长... 

 我们看这张图:

这里的数字就是  步数  ;

深搜用到的原理是  栈  而  广搜  用到的原理则是  队列;

没学过  栈  和  队列  的小伙伴们可以到这里看一下:

跳转:C/C++ 之 栈 与 队列_MWYA的博客-CSDN博客

广搜的思路就是:

不一条路走下去;

而是把可以走到的地点存进队列,然后一个个走

我们列一个表

X Y

step

2 1 1
1 2 1
1 3 2
2 3 2
3 3 3
1 4 3
3 3 4
3 4 5
... ... ...

我们将这些数字依次存入队列中

下面我们看一个简单的例题

(来源:一本通)

跳转:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)

1329:【例8.2】细胞

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 20242     通过数: 11400
【题目描述】
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值