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

python广度优先搜索(BFS)算法

BFS是一种用于图的遍历或搜索算法,它从根节点(选择某个任意节点作为起点)开始,首先访问其所有邻居节点,然后再依次访问这些邻居节点的未访问邻居节点

from collections import deque

def bfs(graph, start):
    # 记录已访问的节点
    visited = set()
    # 初始化队列,并将起始节点加入队列
    queue = deque([start])
    visited.add(start)

    # 当队列不为空时继续循环
    while queue:
        # 从队列中取出并访问队首节点
        vertex = queue.popleft()
        print(vertex, end=" ")

        # 遍历当前节点的所有邻居节点
        for neighbour in graph[vertex]:
            if neighbour not in visited:
                # 如果邻居节点未被访问,则标记为已访问并加入队列
                visited.add(neighbour)
                queue.append(neighbour)

# 示例图
graph = {
    'A': ['B', 'C', 'D'],
    'B': ['E', 'F'],
    'C': ['G'],
    'D': [],
    'E': [],
    'F': [],
    'G': []
}

# 调用BFS函数并传入图和起始节点
bfs(graph, 'A')

1.导入模块

from collections import deque

2.定义BFS函数

def bfs(graph,start):

定义一个名为 bfs 的函数,接收两个参数:图 graph 和起始节点 start

3.初始化数据结构:

visited = set()

queue = deque([start])

visited.add(start)

4.处理队列中的节点:

while queue:

vertex = queue.popleft()

print(vertex,end=" ")

5.遍历邻居节点:

for neighbour in graph[vertex]:

if neighbour not in visited:

visited.add(neighbour)

queue.append(neighbour)

对于当前节点vertex 的每一个邻居节点 neighbour,如果该邻居节点尚未被访问过,则将其标记为已访问,并加入队列

6.示例图:

graph = {

'A':['B','C','D'],

'B':['E','F'],

'C':['G'],

'D':[ ],

'E':[ ],

'F':[ ],

'G':[ ]

}

这是一个简单的无向图,表示了各个节点及其连接关系

7.调用bfs函数

bfs(graph,'A')

以节点 'A' 作为起始节点,对给定的图执行广度优先搜索。

相关文章:

  • 16.使用读写包操作Excel文件:XlsxWriter 包
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(47)乾坤图演路径 - 欧拉路径(Hierholzer 算法)
  • 完善机器人:让 DeepSeek 使用Vue Element UI快速搭建 AI 交互页面
  • vue埋点
  • LinuX---进程线程类
  • DFS深度优先搜索
  • 完善机器人:让 DeepSeek 生成 API 接口,并在网页上调用
  • 浅谈数据分析及数据思维
  • Android/AOSP源码编译错误:TEMPORARY_DISABLE_PATH_RESTRICTIONS
  • Linux从零搭建Dify智能体平台(包含网络代理、docker安装、docker镜像地址设置)
  • flinkOracleCdc源码介绍
  • Java8的新特性
  • python如何获取三个小时之前的时间并输出
  • MCP,你的大模型USB通用接口
  • 知网研学赋能研究生教育:提升科研素质与创新能力的实践与探索
  • Vue 3 组件库主题化与可扩展性深度剖析:设计模式与实现策略 - 构建灵活适应多场景的组件库架构
  • 【SpringMVC】常用注解:@RequestParam
  • 大数据面试之路 (二) hive小文件合并优化方法
  • 写一个简单的SQL生成工具
  • 《论语别裁》第01章 学而(25) 善知识与恶知识
  • 从近200件文物文献里,回望光华大学建校百年
  • 上海国际珠宝时尚功能区未来三年如何建设?六大行动将开展
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 黑龙江省政府副秘书长许振宇,拟任正厅级领导
  • 李强:把做强国内大循环作为推动经济行稳致远的战略之举
  • 澳大利亚首例“漂绿”诉讼开庭:能源巨头因“碳中和”承诺遭起诉