广度优先算法(BFS)是一种基于图的遍历算法,一般用于查找图或树结构中的最短路径。
BFS 基于队列实现,将某一节点周围的所有节点放入队列中,并从队列中取出节点,依次遍历它的周围节点,直至遍历完整个图或找到目标节点。
以下是 Python 语言的 BFS 代码示范:
# 定义节点类
class Node:
def __init__(self, val=None, neighbors=None):
self.val = val
self.neighbors = neighbors or []
# 定义 BFS 函数
def bfs(node: Node, target: Node) -> Node:
if not node or not target:
return None
if node == target:
return node
queue = [] # 定义队列
visited = set() # 定义已访问节点集合
queue.append(node)
visited.add(node)
while queue:
cur = queue.pop(0) # 从队列中取出节点并遍历
if cur == target:
return cur
for neighbor in cur.neighbors: # 遍历当前节点的周围节点
if neighbor not in visited:
queue.append(neighbor)
visited.add(neighbor)
return None
在上述代码中,我们定义了一个节点类 Node
,包含该节点的值 val
和周围节点列表 neighbors
。然后,我们定义了 BFS 函数 bfs(node: Node, target: Node) -> Node
,其中参数 node
是起始节点,target
是目标节点,返回值为目标节点。
在 BFS 函数内部,我们定义了一个队列 queue
和已访问节点集合 visited
。首先将起始节点加入队列和已访问集合,然后开始循环遍历队列。每次从队列中取出一个节点并遍历它的周围节点,将未访问过的节点加入队列和已访问集合。
如果找到目标节点,直接返回该节点;如果队列被遍历完了仍然没有找到目标节点,说明图中不存在目标节点,返回 None
。