欢迎访问宙启技术站
智能推送

图(Graph)的广度优先搜索算法在Python中的实现

发布时间:2024-01-11 05:03:44

广度优先搜索算法(Breadth First Search,简称BFS)是一种用于图的遍历的算法,它从图中的一个顶点(起始顶点)开始,按照宽度优先的方式扩展层级,访问所有与起始顶点直接相连的顶点,然后再按照广度优先的方式访问这些顶点的相邻顶点,直到遍历完整个图。

在Python中,可以使用队列(Queue)数据结构来实现BFS算法。下面是BFS算法在Python中的实现,并附带一个使用例子:

from collections import deque

def bfs(graph, start):
    visited = set()  # 记录已访问的顶点
    queue = deque([start])  # 创建一个队列,起始顶点入队列

    while queue:
        vertex = queue.popleft()  # 出队列一个顶点
        if vertex not in visited:
            print(vertex)  # 访问该顶点
            visited.add(vertex)
            for neighbor in graph[vertex]:
                if neighbor not in visited:
                    queue.append(neighbor)  # 将与该顶点直接相连的未访问过的顶点入队列

上述代码中,graph表示输入的图,它以字典的形式表示,每个顶点作为键,与之相邻的顶点列表作为值。start表示BFS算法的起始顶点。

下面是一个使用例子,假设有以下图:

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

我们可以以顶点'A'作为起始顶点,调用bfs(graph, 'A')进行广度优先搜索:

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

bfs(graph, 'A')

输出结果为:

A
B
C
D
E
F

这表示按照广度优先的方式遍历了该图的所有顶点。

总结来说,BFS算法可以在Python中通过使用队列数据结构来实现。它从起始顶点开始,逐层扩展并访问与当前顶点直接相连的顶点,直到遍历完整个图。