数据结构与算法--图的广度优先搜索 (BFS)

        广度优先搜索即是 一种“地毯式层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索。

BFS解决的最短路径问题。 采用BFS进行遍历的话,需要依赖队列,先进先出。 

假设我们有这么一个图,里面有A、B、CDEFGH 8 个顶点,点和点之间的联系如下图所示, 对这个图进行广度优先的遍历

第一步 选择起始顶点,从顶点 A 开始。把 A 压入队列,标记它为访问过(用红色标记)。

第二步 从队列的头取出顶点 A,输出到结果中,同时将与它相连的尚未被访问过的点按照字母大小顺序压入队列,同时把它们都标记为访问过,防止它们被重复地添加到队列中。 

第三步 从队列的头取出顶点 B,打印输出它,同时将与它相连的尚未被访问过的点(也就是 E F)压入队列,同时把它们都标记为访问过。

 

第四步  继续从队列的头取出顶点 D,打印输出它,此时我们发现,与 D 相连的顶点 A F 都被标记访问过了,所以就不要把它们压入队列里。 

 

第五步 接下来,队列的头是顶点 G,打印输出它,同样的,G 周围的点都被标记访问过了。我们不做任何处理。

 

第六步 队列的头是 E,打印输出它,它周围的点也都被标记为访问过了,我们不做任何处理。 

 

第七步 接下来轮到顶点 F,打印输出它,将 C 压入队列,并标记 C 为访问过。​​​​​​​

第八步 将 C 从队列中移出,打印输出它,与它相连的 H 还没被访问到,将 H 压入队列,将它标记为访问过。

第九步 队列里只剩下 H 了,将它移出,打印输出它,发现它的邻居都被访问过了,不做任何事情。

第十步 队列为空,表示所有的点都被处理完毕了,程序结束。

时间复杂度
采用邻接表方式实现
每个顶点都需要被访问一次,时间复杂度是 O(V) ;相连的顶点(也就是每条边)也都要被访问一次,加起来就是 O(E) 。因此整体时间复杂度就是 O(V+E)
采用邻接矩阵方式实现
V 个顶点,每次都要检查每个顶点与其他顶点是否有联系,因此时间复杂度是 O(V^2)。  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值