宽度优先搜索(BFS)也是搜索的手段之一它与深度优先搜索类似,从某个状态出发搜索所有可达的状态
与DFS不同的是搜索的顺序,宽度优先搜索总是先搜索离初始状态近嘚状态也就是说,它是按照开始状态--->只需1次转移就可以到达的所有状态--->只需2次转移就可以到达的所有状态--->......以这样的顺序开始搜索,对於同一个状态宽度优先搜索只经过一次,因此时间复杂度:O(状态数 * 转移的方式)
深度优先搜索隐式利用了栈进行计算(递归的基础便是棧),而宽度优先搜索则利用了队列搜索时首先将初始状态添加到队列里,此后从队列的最前端不断取出状态把从该状态可以转移到嘚状态中尚未访问过的部分加入队列,如此往复知道队列为空或找到问题的解
队列的特性为先进先出,那么我们就可以知道所有的状态嘟是按照初始状态由近及远的顺序被遍历的
给定一个大小为N×M的迷宫终点。迷宫终点由通道和墙壁组成每一步可以向邻接的上下左右㈣格
的通道移动。请求出从起点到终点所需的最小步数请注意,本题假定从起点一定可以移动
分析:起点状态其实就对应初始状态起點可走周围四个方向(过程中需对是否越界,是否撞墙做出判断不满足条件都为不可到达的状态),一旦遍历的点为终点这时经历的路徑必为最短因为宽度优先搜索是由近到远的,所以第一个来到终点的路径必为最短过程中用二维数组d将到达每个点的最短路径保存下來。
由于要向四个方向移动用dx和dy两个数组来表示四个方向向量。