看书上为啥广度优先算法需要用到队列?
可能还是很迷糊
详细讲解或推到一下,广度优先为什么要用到队列
广度搜索的核心
深度搜索的核心就是一个人一直往前走,不停试错,直到终点
广度搜索的核心就是,一群人,每个岔路口都分出去一部分,同时往前跑,有一个到底终点即可
广度搜索
为了便于观察,把障碍点由1,改成-1
| 0 | -1 | 0 | 0 | 0 |
| 0 | -1 | 0 | -1 | 0 |
| 0 | 0 | 0 | 0 | 0 |
| 0 | -1 | -1 | -1 | 0 |
| 0 | 0 | 0 | -1 | 0 |
从左上出发
| 0 | -1 | 6 | 7 | 8 |
| 1 | -1 | 5 | -1 | 7 |
| 2 | 3 | 4 | 5 | 6 |
| 3 | -1 | -1 | -1 | 7 |
| 4 | 5 | 6 | -1 | 8 |
如果安装访问顺序,画出树状图
整个前进图时间顺序,就是从上往下流动,到达同一层级点的时间时完全一致的
但是计算机的数据存储就是一个一维数组
所以将同一层级的点,再按照从左往右的顺序,把他变成一个小的整体的数组
按序访问这个小数组的每个点的下一个到达点
最后的queue就是以时间顺序,各层数组再拼接为一个最后的数组
广度搜索与先进先出的关系
理论上在A层搜索完成后得到B层,就需要再对B层搜索
时序上是一致的,就和排队一样,先排队的先结账
如何递归
递归写法是肯定能写的
但是下一层的访问点数量不固定,这需要动态分配内存,至少当前阶段无法写出来
广度优先搜索(BFS)利用队列来确保搜索的顺序,模拟一群人同时探索不同路径直到找到目标。它与深度优先搜索不同,后者像一个人不断尝试错误直至终点。BFS的关键在于层次遍历,队列的先进先出特性保证了同一层次的节点被依次处理,形成时间上的顺序。递归实现虽然可能,但因下一层节点数不确定,动态内存分配成为挑战。
8119

被折叠的 条评论
为什么被折叠?



