BFS(广度优先搜索)和DFS(深度优先搜索)是两种常见的图搜索算法,用于解决在图中查找特定节点或遍历整个图的问题。它们之间的区别如下所示:
搜索方式:
数据结构:
搜索顺序:
下面是两种算法的示例代码:
BFS算法示例代码:
def BFS(graph, start):
visited = set() # 用来记录已访问的节点
queue = [start] # 初始节点入队
visited.add(start) # 标记初始节点为已访问
while queue:
node = queue.pop(0) # 出队一个节点
print(node) # 访问该节点
for neighbor in graph[node]:
if neighbor not in visited:
queue.append(neighbor) # 将未访问的邻居节点入队
visited.add(neighbor) # 标记邻居节点为已访问
DFS算法示例代码:
def DFS(graph, start, visited=None):
if visited is None:
visited = set() # 用来记录已访问的节点
visited.add(start) # 标记当前节点为已访问
print(start) # 访问当前节点
for neighbor in graph[start]:
if neighbor not in visited:
DFS(graph, neighbor, visited) # 递归访问邻居节点
这两个示例代码都是基于邻接表表示的图进行搜索,其中graph
是一个字典,键是节点,值是与该节点相邻的节点列表。