广度优先搜索介绍
来源:互联网 发布:淘宝全球购有什么好处 编辑:程序博客网 时间:2024/06/06 16:53
这道题的原址:http://blog.csdn.net/johsnows/article/details/52997282
BFS是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。BFS并不使用经验法则算法。
--------百度百科
搜索其实算一种暴力枚举的算法,不过这种暴力枚举是一种有条理性的暴力枚举, 更容易控制以及实现。它在求最短路以及遍历图或树的时候会用到。
说它是一种暴力枚举的算法是因为,如同百科提到的,它在搜索的时候仍然会遍历整张图中的所有节点,而它的条理性则体现在它用一个队列记录每一步搜索的状态,每一步新加入的状态都会加入队列,用于下一次搜索,并且状态会被继承。这种在图上实现的搜索不仅容易实现,也容易记录每一步的状态,用于求出答案(如最短路)。
建图方式:
邻接矩阵:二维数组: a[x][y]。x表示横坐标,y表示纵坐标,a[x][y]即代表这个点的状态。
邻接表: 指针数组:
当题目所给的图过大,横纵坐标的最大值超过二维数组能开的空间时,可以使用邻接表。a[x]代表每一行的头结点。列和状态用链表的结点记录,挂在对应行的头结点之后。这样可以存下一个足够大的图,当然操作起来会更麻烦。
用于下一步搜索的next数组:
每一行的值分别代表向上右下左走一步,这样可以直接用一层for来实现向下一步搜索。
如dx=x+next[i][0], dy=y+next[i][1];
另外虽然是枚举,但是已经走过点应当避免重复枚举,所有用一个book[x][y]数组记录该点是否已经走过。
下面通过一个简单的用bfs求解的问题来讲解
题目:给出一个长为n宽m的地图,起点x,y和终点sx,sy,以及M个障碍物(不能经过的点),问从起点到终点最少需要经过多少步数。
关于bfs的用法就在代码中具体述说了:
- 广度优先搜索介绍
- 广度优先搜索介绍
- 双向广度优先搜索(介绍)
- 双向广度优先搜索(介绍)
- BFS(广度优先搜索)基本介绍
- 简单介绍深度优先和广度优先搜索
- 广度优先搜索算法
- 双向广度优先搜索
- 广度优先搜索法
- pku2251(广度优先搜索)
- POJ1184Clerver_Writer:广度优先搜索
- Java广度优先搜索
- [AI]广度优先搜索
- 广度优先搜索-BFS
- 广度优先搜索算法
- 广度优先搜索算法
- BFS广度优先搜索
- 广度优先搜索 BFS
- Android基础——JSON数据的全方位解析
- Java类加载及初始化顺序
- psutil python库
- 解决ueditor上传文件到tomcat虚拟路径等问题
- 微信公众号的index接口存放位置
- 广度优先搜索介绍
- Python基础-条件判断和循环
- 11月02日 星期三
- 代码问题mm
- Java中的垃圾回收
- mvc 控制器中 return ActionResult 的注意
- Android 7.0多语言支持开发浅析
- windows下搭建Apache+Mysql+PHP开发环境
- 和为s的正数序列