当前位置:   article > 正文

python广度优先搜索(BFS)从入门到精通_python bfs

python bfs

广度优先搜索(Breadth-First Search,简称BFS)是一种图的遍历算法,用于在图或树中按照层级进行搜索。BFS从给定的起始节点开始,逐层遍历节点,直到找到目标节点或遍历完整个图。本文将介绍BFS算法的基本原理,并通过Python代码进行详细讲解。

一、原理

BFS算法的基本原理是从起始节点开始,逐层遍历与当前节点直接相连的节点,直到找到目标节点或遍历完整个图。BFS通常使用队列来辅助实现。
基本步骤如下:

  1. 创建一个队列,并将起始节点入队。
  2. 初始化一个集合用于存储已经访问过的节点。
  3. 从队列中取出一个节点,访问该节点,并将其所有未访问过的相邻节点入队。
  4. 标记当前节点为已访问。
  5. 重复步骤3和步骤4,直到队列为空或找到目标节点。

二、示例代码

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

from collections import deque

def bfs(graph, start, target):
    """
    广度优先搜索算法
    :param graph: 图的邻接表表示
    :param start: 起始节点
    :param target: 目标节点
    :return: 是否找到目标节点
    """
    queue = deque()  # 创建队列
    queue.append(start)  # 将起始节点入队
    visited = set()  # 创建集合用于存储已访问的节点

    while queue:
        node = queue.popleft()  # 从队列中取出一个节点
        if node == target:
            return True  # 找到目标节点

        visited.add(node)  # 标记节点为已访问

        for neighbor in graph[node]:
            if neighbor not in visited:
                queue.append(neighbor)  # 将未访问的相邻节点入队

    return False  # 未找到目标节点
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这段代码中,我们定义了一个 bfs 函数,接受一个图的邻接表表示 graph、起始节点 start 和目标节点 target 作为参数。函数使用队列 queue 来辅助实现BFS算法。首先将起始节点入队,然后不断从队列中取出节点,访问该节点,并将其未访问过的相邻节点入队。通过集合 visited 来记录已访问过的节点,避免重复访问。

三、使用示例

接下来,我们将使用示例来演示BFS算法的使用方法。假设有以下图的邻接表表示:


graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
}

start_node = 'A'
target_node = 'F'

if bfs(graph, start_node, target_node):
    print("找到目标节点")
else:
    print("未找到目标节点")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行上述代码,将得到输出结果为:

找到目标节点
  • 1

可以看到,BFS算法成功找到了从起始节点到目标节点的路径。

四、总结

通过本文的讲解,我们了解了广度优先搜索(BFS)算法的基本原理,并通过Python代码进行了实现。BFS算法是一种常用的图的遍历算法,它按照层级进行搜索,适用于解决寻找最短路径、连通性等问题。熟练掌握BFS算法对于处理图相关的任务非常重要。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/464437
推荐阅读
相关标签
  

闽ICP备14008679号