算法 -- 广度优先搜索

广度优先搜索(BFS):是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

BFS在求解最短路径或者最短步数上有很多的应用。

应用最多的是在走迷宫上。

单独写代码有点泛化,取来自九度1335闯迷宫 一例说明,并给出C++/Java的具体实现。

在一个n*n的矩阵里走,从原点(0,0)开始走到终点(n-1,n-1),只能上下左右4个方向走,只能在给定的矩阵里走,求最短步数。n*n是01矩阵,0代表该格子没有障碍,为1表示有障碍物。

int mazeArr[maxn][maxn]; //表示的是01矩阵

int stepArr[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; //表示上下左右4个方向

int visit[maxn][maxn]; //表示该点是否被访问过,防止回溯,回溯很耗时。

核心代码。基本上所有的BFS问题都可以使用类似的代码来解决。

代码:

猜你喜欢

转载自blog.csdn.net/qq_38021852/article/details/82622536
今日推荐