看书上为啥广度优先算法需要用到队列?
可能还是很迷糊
详细讲解或推到一下,广度优先为什么要用到队列
广度搜索的核心
深度搜索的核心就是一个人一直往前走,不停试错,直到终点
广度搜索的核心就是,一群人,每个岔路口都分出去一部分,同时往前跑,有一个到底终点即可
广度搜索
为了便于观察,把障碍点由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层搜索
时序上是一致的,就和排队一样,先排队的先结账
如何递归
递归写法是肯定能写的
但是下一层的访问点数量不固定,这需要动态分配内存,至少当前阶段无法写出来