广搜
(下面有投票 ; 小声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代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一