图的遍历---广度优先搜索(BFS)

本文介绍了图的遍历方法之一——广度优先搜索BFS,它与树的按层遍历类似,从某顶点出发,优先访问先被访问顶点的邻接点,遵循步长为1、2、3...的顺序。BFS适用于寻找最优解,如最少步长问题。相比之下,深度优先搜索DFS适合目标明确但不追求最优的场景。
摘要由CSDN通过智能技术生成

上一篇我们讲解了图遍历的深度优先搜索DFS,今天讲另外一个图的遍历方法,即广度优先搜索BFS, 广度优先搜索又叫宽度优先搜索,和树的按层遍历的方法是一样的,在便遍历时图和树的区别上一篇文章已经有所讲过不再复述。

广度优先搜索BFS:假设从图中某个顶点V出发, 在访问了V之后一次访问V的各个未曾访问过的邻接点,然后分别从这些邻接点出发,一次访问他们的邻接点;在遍历这些邻接点的时候必须遵从这样的规则:使得先被访问的顶点的邻接点必须先于后被访问的顶点的邻接点。就是说谁先来的谁的子孙就优先于后来的人的子孙进行访问遍历,在树中就是左子树的所有儿子比子树的儿子先被遍历。继续,重复上述过程直到没有可以被访问的顶点。若图为连通图此时所有顶点都已经被遍历过,但是当图为非联通图时,此时还有空余的顶点没有遍历,所有还需要查看是否有剩余未被标记的顶点,然后依次做为起点进行上述过程,直到图中全部顶点都被标记过为止。说白了BFS就是每次都选取相同最短步长的邻接点进行遍历,步长为1, 2, 3, 4...... 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
广度优先搜索是一种用于遍历或搜索的算法,它从起始节点开始,逐层向外遍历,直到找到目标节点或遍历完整张。具体实现过程中,可以使用队列来存储待遍历的节点,先将起始节点加入队列,然后依次取出队列中的节点,将其未访问过的邻居节点加入队列,直到队列为空或者找到目标节点为止。\n\广度优先搜索间复杂度为O(V+E),其中V为节点数,E为边数。在实际应用中,广度优先搜索常用于寻找最短路径、连通性检测等问题。\n\下面是一个简单的Pyth代码示例,演示了如何使用广度优先搜索遍历:\n\```pyth\from collections impor dequ\n\# 定义的邻接表表示\graph = {\ 'A' ['B', 'C'],\ 'B' ['A', 'D', 'E'],\ 'C' ['A', 'F'],\ 'D' ['B'],\ 'E' ['B', 'F'],\ 'F' ['C', 'E']\}\n\# 广度优先搜索函数\f bfs(graph, star, ):\ queu = dequ() # 定义队列\ queu.app(star) # 将起始节点加入队列\ visi = s() # 定义已访问集合\ visi.(star) # 将起始节点标记为已访问\n\ whi queu\ = queu.pplef() # 取出队列中的节点\ if == # 如果找到目标节点,返回Tru\ retur Tru\ for neighbor i graph[] # 遍历当前节点的邻居节点\ if neighbor i visi # 如果邻居节点未被访问过,加入队列并标记为已访问\ queu.app(ighbor)\ visi.(ighbor)\n\ retur Fals # 如果队列为空仍未找到目标节点,返回Fals\n\# 示例:在中查找从节点A到节点F的路径是否存在\pri(bfs(graph, 'A', 'F'))\n\```\n\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值