宽度优先搜索算法

本文介绍了宽度优先搜索算法(BFS),它是对图进行搜索的算法,从起点开始,先遍历相邻点,再依次遍历相邻点的未遍历邻接点,直至所有点遍历完。还给出了Python代码思路,如创建集合保存遍历点、双端队列处理邻接点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

宽度优先搜索算法(BFS)是一种对图进行搜索的算法。宽度优先遍历是,假设开始于某个顶点(起点),从起点开始遍历与起点相邻的点,相邻点遍历结束后继续遍历上轮第一个遍历节点的相邻的未遍历的点,直到所有的点都遍历一遍后结束。

假设某个无向图的起点为a,其相邻点有b,c,d,则遍历完a点后遍历b,c,d点。b,c,d遍历完后,开始遍历b点未遍历过的邻接点e,f。e,f遍历完后,开始遍历c点未遍历过的邻接点,直到起点的相邻点的相邻点全部遍历一遍后,开始遍历e的邻接点.....直到所有的点都被遍历过一次。

 python代码思路:

创建一个集合用来保存遍历过的点,创建一个双端队列用来取出点和加入刚遍历后的邻接点,第一个点为起点。

#导入Python的collections模块中的deque类,用于创建一个双端队列
from collections import deque

# 用字典定义一个图的邻接列表表示
graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
}

def bfs(graph, start):
    visited = set()  # 创建一个集合,用来存储已经访问过的节点
    queue = deque()  # 创建一个双端队列,用来进行BFS的队列

    visited.add(start) #向visited添加初始节点
    queue.append(start) #向双端队列添加初始节点

    while queue: #队列不为空则一直循环
        node = queue.popleft() #从队列左侧弹出一个节点,并返回节点,表示当前处理的节点
        print(node, end=' ') #打印当前处理的节点

        # 遍历该节点的所有相邻节点
        for neighbor in graph[node]: #遍历当前节点的所有邻接点
            if neighbor not in visited: #如果邻接点没有被访问过
                visited.add(neighbor) #将邻接点加入集合
                queue.append(neighbor) #将邻接点加入队列的末尾

# 从节点'A'开始进行BFS
bfs(graph, 'A')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值