图的广度优先遍历与深度优先遍历在数据结构中的代码
时间: 2023-06-21 17:11:27 浏览: 111
广度优先遍历(BFS)和深度优先遍历(DFS)是图的两种常用遍历方式,在数据结构中的代码如下:
```python
# 图的广度优先遍历
from collections import deque
def bfs(graph, start):
visited = set() # 记录已经遍历过的节点
queue = deque([start]) # 将起始节点加入队列
while queue:
vertex = queue.popleft() # 取出队列中的第一个节点
if vertex not in visited:
visited.add(vertex) # 将该节点标记为已遍历
neighbors = graph[vertex] # 获取该节点的邻居节点
queue.extend(neighbors) # 将邻居节点加入队列
return visited
# 图的深度优先遍历
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start) # 将该节点标记为已遍历
for next in graph[start]: # 遍历该节点的邻居节点
if next not in visited:
dfs(graph, next, visited) # 对未遍历的邻居节点递归调用dfs函数
return visited
```
其中,`graph`表示图的邻接表,`start`表示起始节点。在广度优先遍历中,我们使用`deque`双端队列来存储节点,每次从队列左侧取出第一个节点进行遍历;在深度优先遍历中,我们使用递归的方式对每个节点的邻居节点进行遍历。两种方法都使用一个`visited`集合来记录已经遍历过的节点,防止重复遍历。
阅读全文