广度优先搜索算法 BFS

广度优先搜索算法(Breadth-First Search, BFS)

算法思路

广度优先搜索(BFS)是一种用于图和树的遍历算法。该算法从一个给定的节点(起始节点)开始,探索所有该节点的邻居节点。然后对每个邻居节点,它再进一步探索它们的未访问的邻居节点,并将它们添加到一个队列中。这一过程会持续进行,直到队列为空,或者找到目标节点。BFS逐层地进行搜索,首先检查距离起始节点最近的所有节点,然后逐渐向外扩展到更远的节点。该算法在许多问题中都非常有效,包括最短路径搜索、网络爬虫、社交网络分析等。

算法程序框图

  1. 初始化一个空队列 Q 和一个已访问节点集合 visited。
  2. 将起始节点 start 添加到 Q 和 visited 中。
  3. 当 Q 不为空:
  4. 出队一个节点 n。
  5. 检查 n 是否是目标节点:
  6. 如果是,算法结束。
  7. 遍历 n 的所有未访问邻居 m:
  8. 将 m 添加到 Q 和 visited。
  9. 结束算法。
    在这里插入图片描述

主要函数代码

下面是使用Python实现的BFS算法代码:

from collections import deque

def bfs(graph, start, target):
    visited = set()
    queue = deque([start])
    visited.add(start)

    print(f"初始化: 队列 = {list(queue)}, 已访问 = {list(visited)}")

    while queue:
        current_node = queue.popleft()

        print(f"出队: 当前节点 = {current_node}, 队列 = {list(queue)}")
        
        if current_node == target:
            print(f"找到目标节点: {target}")
            return True

        for neighbor in graph[current_node]:
            if neighbor not in visited:
                queue.append(neighbor)
                visited.add(neighbor)
                print(f"入队: 邻居节点 = {neighbor}, 队列 = {list(queue)}")
                
    print("目标节点未找到")
    return False

# 示例图(邻接表表示)
graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F'],
    'D': [],
    'E': ['F'],
    'F': []
}

# 使用 BFS 查找从 A 到 F 的路径
bfs(graph, 'A', 'F')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Xiaopang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值