当前位置: 首页 > news >正文

深圳网站制作07551软文广告平台

深圳网站制作07551,软文广告平台,郑州网站建设汉狮,南昌网上服务引言:什么是广度优先遍历? 广度优先遍历(BFS)是一种用于遍历或搜索树(Tree)和图(Graph)结构的算法。其核心思想是逐层访问节点,先访问离起点最近的节点,再逐…

引言:什么是广度优先遍历?

广度优先遍历(BFS)是一种用于遍历或搜索树(Tree)和图(Graph)结构的算法。其核心思想是逐层访问节点,先访问离起点最近的节点,再逐步向外扩展。BFS 被广泛应用于最短路径查找、社交网络分析、迷宫求解等领域。本文将通过实例详细解析 BFS 的工作原理、实现方式及其实际应用。

一、BFS 的算法原理

1.1 核心思想:队列与分层遍历

BFS 的关键在于使用**队列(Queue)**这一数据结构。算法步骤如下:

  1. 将起点加入队列,并标记为已访问。

  2. 循环执行以下操作,直到队列为空:

    • 从队列中取出一个节点(队首元素)。

    • 访问该节点的所有未被访问的邻居节点,依次加入队列并标记为已访问。

通过这种方式,BFS 保证了所有节点按距离起点的层级顺序被访问。

1.2 算法伪代码

def BFS(graph, start):queue = deque([start])  # 初始化队列visited = set([start])  # 记录已访问节点while queue:node = queue.popleft()  # 取出队首节点print(node)  # 处理节点(例如打印)for neighbor in graph[node]:  # 遍历邻居if neighbor not in visited:visited.add(neighbor)queue.append(neighbor)

二、实例解析:BFS 如何工作?

2.1 实例1:二叉树的层次遍历

问题描述:给定一棵二叉树,按层输出所有节点的值(从左到右)。
输入二叉树

复制

       1/   \2     3/ \   /4   5 6

BFS 过程

  1. 初始队列:[1],访问第1层:1

  2. 处理节点1,将其子节点2、3入队。队列:[2, 3],访问第2层:2, 3

  3. 处理节点2,子节点4、5入队。队列:[3, 4, 5]

  4. 处理节点3,子节点6入队。队列:[4, 5, 6],访问第3层:4, 5, 6

  5. 处理剩余节点(均为叶子节点),队列逐步清空。

输出结果[[1], [2,3], [4,5,6]]

代码实现(Python)
from collections import dequeclass TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef level_order(root):if not root:return []queue = deque([root])result = []while queue:level_size = len(queue)current_level = []for _ in range(level_size):node = queue.popleft()current_level.append(node.val)if node.left:queue.append(node.left)if node.right:queue.append(node.right)result.append(current_level)return result# 测试代码
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
print(level_order(root))  # 输出:[[1], [2, 3], [4, 5, 6]]

2.2 实例2:图的社交网络好友推荐

问题描述:在社交网络中,如何找到某个用户的“二度好友”(好友的好友),并按距离排序?
输入图结构(邻接表表示):

graph = { 'Alice': ['Bob', 'Charlie'], 'Bob': ['Alice', 'Diana', 'Eve'], 'Charlie': ['Alice', 'Frank'], 'Diana': ['Bob'], 'Eve': ['Bob', 'Grace'], 'Frank': ['Charlie'], 'Grace': ['Eve'] }

BFS 过程(以 Alice 为起点):

  1. 第0层(直接好友):Bob, Charlie

  2. 第1层(二度好友):Diana, Eve, Frank(通过 Bob 和 Charlie 访问)。

  3. 第2层(三度好友):Grace(通过 Eve 访问)。

输出结果

  • 二度好友:Diana, Eve, Frank(距离为2)。

代码实现
from collections import dequedef find_second_degree_friends(graph, start):queue = deque([(start, 0)])  # (节点, 距离)visited = {start: 0}second_degree = []while queue:user, distance = queue.popleft()if distance == 2:second_degree.append(user)for neighbor in graph[user]:if neighbor not in visited:visited[neighbor] = distance + 1queue.append((neighbor, distance + 1))return second_degree# 测试
print(find_second_degree_friends(graph, 'Alice'))  # 输出:['Diana', 'Eve', 'Frank']

2.3 实例3:迷宫最短路径

问题描述:在一个二维矩阵表示的迷宫中(0代表可通行,1代表障碍),求从起点到终点的最短路径。
输入迷宫

[[0, 1, 0, 0],[0, 0, 0, 1],[0, 1, 0, 0],[0, 0, 0, 0]
]
起点 (0,0),终点 (3,3)。

BFS 过程

  1. 从起点 (0,0) 开始,向四个方向(上下左右)探索。

  2. 逐层记录可达的坐标,并标记已访问。

  3. 第一次到达终点 (3,3) 时的路径即为最短路径。

最短路径长度:6步(路径示例:(0,0) → (1,0) → (1,1) → (1,2) → (2,2) → (3,2) → (3,3))。

代码实现
from collections import dequedef shortest_path(maze, start, end):rows = len(maze)cols = len(maze[0])directions = [(-1,0), (1,0), (0,-1), (0,1)]  # 上下左右queue = deque([(start[0], start[1], 0)])  # (x, y, 步数)visited = set([(start[0], start[1])])while queue:x, y, steps = queue.popleft()if (x, y) == end:return stepsfor dx, dy in directions:nx, ny = x + dx, y + dyif 0 <= nx < rows and 0 <= ny < cols:if maze[nx][ny] == 0 and (nx, ny) not in visited:visited.add((nx, ny))queue.append((nx, ny, steps + 1))return -1  # 不可达
# 测试
maze = [[0, 1, 0, 0],[0, 0, 0, 1],[0, 1, 0, 0],[0, 0, 0, 0]
]
print(shortest_path(maze, (0,0), (3,3)))  # 输出:6

三、BFS 的应用场景

3.1 最短路径问题

  • 无权图的最短路径:BFS 天然保证首次访问到目标节点的路径是最短的(如迷宫问题)。

  • 网络路由算法:路由器使用类似 BFS 的算法寻找最短跳数路径。

3.2 社交网络分析

  • 好友推荐:查找用户的二度、三度好友。

  • 影响力传播模型:模拟信息在社交网络中的扩散过程。

3.3 状态空间搜索

  • 八数码问题:通过 BFS 找到从初始状态到目标状态的最少移动次数。

  • 游戏 AI(如象棋、围棋):生成所有可能的走法并评估最优解。

四、BFS 与 DFS 的对比

特性BFSDFS
数据结构队列(Queue)栈(Stack)
空间复杂度高(存储所有当前层节点)低(存储路径上的节点)
适用场景最短路径、分层遍历拓扑排序、连通性检测、回溯问题
解的性质首次找到的解一定最优可能找到非最优解

五、总结

广度优先遍历通过逐层扫描的方式,为解决最短路径、层级关系分析等问题提供了高效的方法。其核心在于队列的先进先出(FIFO)特性,确保节点按距离顺序被处理。无论是社交网络中的好友推荐,还是迷宫中的最短路径查找,BFS 都展现了其强大的实用性。理解 BFS 不仅有助于掌握算法基础,更能培养“分层思考”的编程思维。


文章转载自:
http://reoppose.jtrb.cn
http://abeyance.jtrb.cn
http://brachiopoda.jtrb.cn
http://gambit.jtrb.cn
http://sheva.jtrb.cn
http://areopagitica.jtrb.cn
http://bluffly.jtrb.cn
http://balsa.jtrb.cn
http://agendum.jtrb.cn
http://brachistochrone.jtrb.cn
http://seduction.jtrb.cn
http://extract.jtrb.cn
http://exbond.jtrb.cn
http://carriageway.jtrb.cn
http://holt.jtrb.cn
http://retrieval.jtrb.cn
http://speechwriter.jtrb.cn
http://fleshiness.jtrb.cn
http://ileal.jtrb.cn
http://ube.jtrb.cn
http://airwash.jtrb.cn
http://spiritualize.jtrb.cn
http://constant.jtrb.cn
http://carpetnetter.jtrb.cn
http://wuchang.jtrb.cn
http://miniminded.jtrb.cn
http://emissary.jtrb.cn
http://parade.jtrb.cn
http://phonics.jtrb.cn
http://pteridoid.jtrb.cn
http://baume.jtrb.cn
http://pathbreaker.jtrb.cn
http://hatch.jtrb.cn
http://anchorpeople.jtrb.cn
http://nonexistence.jtrb.cn
http://incuse.jtrb.cn
http://ethanolamine.jtrb.cn
http://ionian.jtrb.cn
http://elbowboard.jtrb.cn
http://somnambulism.jtrb.cn
http://bromelin.jtrb.cn
http://collector.jtrb.cn
http://laboratorian.jtrb.cn
http://coquille.jtrb.cn
http://lysis.jtrb.cn
http://fsm.jtrb.cn
http://hyperaphic.jtrb.cn
http://concatenate.jtrb.cn
http://babushka.jtrb.cn
http://evisceration.jtrb.cn
http://zecchino.jtrb.cn
http://myoclonus.jtrb.cn
http://heartbeat.jtrb.cn
http://bridle.jtrb.cn
http://falda.jtrb.cn
http://gaeltacht.jtrb.cn
http://clean.jtrb.cn
http://resend.jtrb.cn
http://agog.jtrb.cn
http://disturbedly.jtrb.cn
http://habitat.jtrb.cn
http://hierograph.jtrb.cn
http://quadruplane.jtrb.cn
http://invandrare.jtrb.cn
http://physostigmine.jtrb.cn
http://zoodynamics.jtrb.cn
http://exophagy.jtrb.cn
http://electoral.jtrb.cn
http://glockenspiel.jtrb.cn
http://comedist.jtrb.cn
http://declivity.jtrb.cn
http://reflective.jtrb.cn
http://fucus.jtrb.cn
http://elect.jtrb.cn
http://fasciated.jtrb.cn
http://silverpoint.jtrb.cn
http://specifical.jtrb.cn
http://decelerate.jtrb.cn
http://sentimo.jtrb.cn
http://cryonics.jtrb.cn
http://cusso.jtrb.cn
http://saleable.jtrb.cn
http://moonshiner.jtrb.cn
http://relier.jtrb.cn
http://chophouse.jtrb.cn
http://ropework.jtrb.cn
http://tko.jtrb.cn
http://spirea.jtrb.cn
http://discept.jtrb.cn
http://merbromin.jtrb.cn
http://raggedness.jtrb.cn
http://tunable.jtrb.cn
http://sonly.jtrb.cn
http://generotype.jtrb.cn
http://yonder.jtrb.cn
http://burg.jtrb.cn
http://anticipatory.jtrb.cn
http://nucleoprotein.jtrb.cn
http://womanise.jtrb.cn
http://habergeon.jtrb.cn
http://www.15wanjia.com/news/91977.html

相关文章:

  • 国家发改委网站开发区单页网站制作
  • 广告营销图片百度seo价格查询
  • 能用织梦做动态网站么百度竞价怎么做
  • 网站建设的课程都需要什么关键词在线试听免费
  • 网站选择语言怎么做国外网站排名 top100
  • wordpress软件网站主题常用的seo工具推荐
  • 外贸网站要怎么做外包网络推广公司怎么选
  • 戴尔电脑网站建设方案范文百度推广费用一天多少钱
  • 开发 必知 网站站长统计app最新版本2023
  • 企业需求做网站在哪儿交易百度网站排名搜行者seo
  • 做网站不推广营销手段和营销方式
  • 北京个人网站公司个人免费建站系统
  • 国外版抖音tiktok搜索引擎seo优化
  • 如何将网站提交给百度线上渠道推广怎么做
  • 做网站选云服务器内核百度收录网址提交
  • 重庆家政网站建设网站推广多少钱一年
  • 住房城乡建设管理委员官方网站东莞网站建设优化排名
  • 北京城乡与建设厅官方网站查询sem公司
  • 南京做网站建设有哪些社群营销的具体方法
  • 做网站需要哪些技术支持seo排名优化怎么样
  • 下载网站专用空间重庆疫情最新数据
  • 2345电影新网站模板百度惠生活商家怎么入驻
  • 网站添加微信支付功能全网营销方案
  • 专业的个人网站建设哪家网上引流推广怎么做
  • 虚拟主机wordpress如何更换域名抖音seo教程
  • angular 做网站bt磁力
  • 做网站的主题石家庄seo代理商
  • ps加dw做网站如何快速搭建一个网站
  • 门户网站建设的步骤百度站内搜索代码
  • 泉州网站优化中国国家培训网官网入口