BFS

BFS(广度优先搜索,Breadth-First Search)是一种用于遍历或搜索树或图的算法。它的核心思想是从起始节点开始,逐层向外扩展,先访问离起始节点最近的节点,再访问更远的节点。BFS通常使用队列(Queue)来实现。


BFS的核心思想

  1. 逐层扩展

    • 从起始节点开始,先访问所有与起始节点直接相连的节点(第一层)。
    • 然后访问与第一层节点相连的节点(第二层),依此类推。
  2. 队列的使用

    • 使用队列来存储待访问的节点。
    • 每次从队列中取出一个节点,访问其所有未访问的邻居节点,并将这些邻居节点加入队列。
  3. 避免重复访问

    • 使用一个集合或数组来记录已访问的节点,确保每个节点只被访问一次。

BFS的步骤

  1. 初始化

    • 将起始节点加入队列,并标记为已访问。
  2. 遍历队列

    • 从队列中取出一个节点,访问该节点。
    • 将该节点的所有未访问的邻居节点加入队列,并标记为已访问。
  3. 重复直到队列为空

    • 继续上述过程,直到队列为空,表示所有可达节点都已访问。

BFS的实现

以下是BFS的Python实现:

from collections import dequedef bfs(graph, start):visited = set()  # 记录已访问的节点queue = deque([start])  # 使用队列存储待访问的节点while queue:node = queue.popleft()  # 取出队列中的第一个节点if node not in visited:print(node)  # 访问当前节点(例如打印)visited.add(node)  # 标记为已访问# 将所有未访问的邻居节点加入队列for neighbor in graph[node]:if neighbor not in visited:queue.append(neighbor)# 示例调用
graph = {'A': ['B', 'C'],'B': ['D', 'E'],'C': ['F'],'D': [],'E': ['F'],'F': []
}
bfs(graph, 'A')

BFS的输出

对于上述图:

img

  1. queue = [A], pop(A), queue = [B, C], visited = [A]
  2. pop(B), queue = [C, D, E], visited = [A, B]
  3. pop(C), queue = [D, E], visited = [A, B, C]
  4. pop(D), queue = [E], visited = [A, B, C, D]
  5. pop(E), queue = [F], visited = [A, B, C, D, E]
  6. pop(F), queue = [], visited = [A, B, C, D, E, F]

BFS的输出结果为:

A
B
C
D
E
F

BFS的特点

  1. 时间复杂度

    • 邻接表表示:O(V + E),其中V是节点数,E是边数。
    • 邻接矩阵表示:O(V²)。
  2. 空间复杂度

    • O(V),取决于队列的大小。
  3. 适用场景

    • 寻找最短路径(在无权图中)。
    • 层级遍历树或图。
    • 检测图中是否存在环。
    • 解决迷宫问题。

BFS的应用示例

1. 寻找最短路径(无权图)

  • 在无权图中,BFS可以找到从起始节点到目标节点的最短路径(最少边数)。

2. 层级遍历

  • 对树或图进行层级遍历,逐层访问节点。

3. 检测图中是否存在环

  • 在无向图中,如果BFS过程中遇到一个已经访问过的节点,并且该节点不是当前节点的父节点,则说明图中存在环。

BFS与DFS的区别

特性 BFS DFS
数据结构 队列 栈(递归或显式栈)
遍历方式 广度优先 深度优先
空间复杂度 O(V)(队列大小) O(V)(递归深度)
适用场景 最短路径、层级遍历 寻找路径、检测环、拓扑排序

总结

BFS是一种基于队列的图遍历算法,适合解决需要逐层扩展的问题,如寻找最短路径、层级遍历等。它的实现简单直观,是图论中最基础的算法之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/866577.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医疗机构的文档协作危机,该如何迎接挑战?

医疗行业协作的核心痛点:文档共享与实时编辑难题 在医疗保健机构中,团队协作至关重要。无论是日常诊疗信息的记录,还是多学科诊疗团队(MDT)的沟通与决策,都需要快速、高效且安全的文档共享与协作方式。然而,传统的纸质记录或本地文件存储方式,存在如下显著问题:信息滞…

聊一聊 C#异步 任务延续的三种底层玩法

一:背景 1. 讲故事 最近聊了不少和异步相关的话题,有点疲倦了,今天再写最后一篇作为近期这类话题的一个封笔吧,下篇继续写我熟悉的 生产故障 系列,突然亲切感油然而生,哈哈,免费给别人看程序故障,是一种积阴德阳善的事情,欲知前世因,今生受者是。欲知来世果,今生做者…

2025年必备开源免费项目管理软件,9款工具全面解析,提升工作效率

高效的项目管理对于团队和企业的成功至关重要。无论是小型创业团队还是大型企业,都需要合适的工具来协调资源、跟踪进度、管理任务。开源免费的项目管理软件因其灵活性、可定制性以及无需高昂成本的特点,成为了众多团队的首选。本文将为您详细介绍9款2025年必备的开源免费项目…

CDS标准视图:银行对账单行项目 I_BankStatementItem

视图名称:银行对账单行项目 I_BankStatementItem 视图类型:基础视图 视图代码:点击查看代码 @AbapCatalog.sqlViewName: IBANKSTATMENTITM @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserT…

智能电网巡检与传感器数据自动分析:3大AI技术助力设备状态实时监测

前言 在智能电网的运行中,设备的实时监测和巡检报告的分析至关重要。定期的巡检报告和传感器数据是确保设备正常运行、预防故障发生的重要依据。然而,传统的人工分析方法不仅耗时,而且易出错。随着人工智能技术的发展,AI系统已能够高效、精准地从电力行业的巡检报告和传感器…

软件系统安全逆向分析-混淆对抗

在一般的软件中,我们逆向分析时候通常都不能直接看到软件的明文源代码,或多或少存在着混淆对抗的操作。下面,我会实践操作一个例子,从无从下手到攻破目标。1. 概述 在一般的软件中,我们逆向分析时候通常都不能直接看到软件的明文源代码,或多或少存在着混淆对抗的操作。下…

国际认可!天翼云合规领域影响力up!

近日,天翼云科技有限公司成功通过ISO 37301合规管理体系双认证(GB/T 35770-2022/ISO 37301:2021 & CTS GHMS001-2024),标志着公司合规管理和风险控制的管理水平达到国际领先标准,合规体系建设迈上了新台阶。近日,天翼云科技有限公司成功通过ISO 37301合规管理体系双认…

INTO TABLE @DATA内表与定义内表的区别

1、两者的区别 DATA定义的内表,会将内表中的字段作为关键组件。 而通过SELECT查询时用INTO TABLE @DATA产生的内表,没有对应的关键组件 两者的区别2、影响 因为新语法产生的内表没有关键组件,所以在LOOP或READ中不能使用DELETE TABLE tab FROM wa_tab.语句进行删除 运行下边…

从极端环境的应用中解析强固型工控机与工业工控机的差异性

一、强固型工控机:设计原理与应用 强固型工控机(Rugged Industrial PC)是专门为了在极端和恶劣环境中稳定运行而设计的电脑设备。这些环境通常包括高强度振动、极端温度、高湿度以及多粉尘等不利条件,为了应对这些挑战,强固型工控机在设计之初就充分考虑这些严苛的环境因素…

公司台式机安转后无网络

网络连接 2025年1月9日 安装台式机,没有网卡,插办工作下有四根网线,我这台在用其中一个,新电脑试了剩下的三条,都不行,今天萧师傅讲了方法,让我试一下,“线都试一下”,解决了来记录一下。先把水晶头插入电脑,看哪个电脑能识别(要等一下,正在识别也是一个球),多试…

VA35计划协议清单增强

1、需求说明 本文档在VA35计划协议清单中加入了VBEP-RRQQTY_BU和VBEP-CRQQTY_BU两个字段, 实现的效果如下:2、实现过程 2.1、调试过程 鉴于这就是个普通的查询展示报表,所以先对VA35的源代码做了断点调试,很容易就找到了要展示的表为POSTAB断点调试找到表内容发生变化的位置…

IBM Storage - 支持AI应用场景的数据存储软硬件解决方案

为了解决数据和工作负载在各地分散的现状,需要实现对存储在分布式文件和对象存储系统中的大量非结构化数据的高速访问。IBM Storage利用人工智能(AI)、机器学习(ML)和高级分析手段,对数据存储基础架构进行现代化改造。概述为了解决数据和工作负载在各地分散的现状,需要实现对…