宽度优先搜索

宽度优先搜索(BFS)

1.什么时候使用BFS

1.图的遍历
	-层级遍历
	-由点及面(连通性)
	-拓扑排序
2.最短路径
	-仅限简单图求最短路径 ,即图中每条边的长度都是1(一样),且没有方向。

2.解树的遍历(层级遍历)

注:树是一种特殊的图,树属于图。

	宽度优先搜索就是把二叉树的每一层依次压入队列。
步骤

1.创建一个队列,把起始节点放进去。
2. while 队列不空,处理队列中的节点,读出该节点的兄弟节点,并加入队列。
3. 把每一层的队列放入数组。在这里插入图片描述lintcode 第 69 题

3.二叉树的序列化

序列化:object => String
反序列化:String => object

方法:Json

4.图的宽度优先搜索(连通性)

图:由点和边组成的。
无向图有向图
在 图 和 树 中进行宽度优先搜索的区别:树有严格的上下级关系(父子关系),图是双向关系(邻居关系)
所以在图中进行BFS可能会存在环,即同一节点可能会多次进入在队列中。在对图进行BFS时,需要记录这一节点有没有处理。综上,处理图的BFS需要用 HashMap

树的充要条件:
1.有 N 个点, N-1 条边。
2.所有点连通。是否可以通过一个点(如顶点),找到所有点。

首先自己构造一个图的邻接表,如下图:
邻接表
例:可以使用 HashMap + HashSet 的结构。 【Map(Integer,Set(Integer))】。

然后就是执行宽度优先搜索算法的步骤:
1、 创建一个队列,把首节点存入。
2、 while 当队列不为空的时候,弹出队列中的节点,并且读出该节点的邻居节点。
3、 判断邻居节点是否已被访问,若已访问,跳过;若未访问,加入队列。

5. 矩阵中的宽度优先搜索

图(Graph)的特点:若有 N个点,M条边
1、M最大是O(N^2)的级别。
2、图上BFS时间复杂度 = O(N+M),最坏情况为 O(N^2)。

矩阵(Matrix)的特点:若有 R行,C列
1、共有RC个点,2RC条边(每个点有上下左右四个方向,每个边连接两个点)
2、矩阵中 BFS时间复杂度 = O(R
C)。

总结:能够用 宽度优先搜索(BFS)写的 就不用深度优先搜索(DFS)去写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值