图的广度优先搜索和深度优先搜素遍历完整代码
时间: 2023-09-28 08:07:54 浏览: 103
图的广度优先搜索和深度优先搜索
广度优先搜索和深度优先搜索是图的遍历算法,以下为它们的完整代码实现。
### 广度优先搜索
```python
from collections import deque
def bfs(graph, start):
visited = set() # 用集合存储已经访问过的节点
queue = deque([start]) # 用队列存储待访问的节点
while queue:
node = queue.popleft() # 取出队列首部的节点
if node not in visited:
visited.add(node)
print(node)
# 将当前节点的未访问的邻居节点加入队列
queue.extend(neighbors for neighbors in graph[node] if neighbors not in visited)
```
### 深度优先搜索
```python
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start)
# 递归遍历当前节点的未访问的邻居节点
for neighbors in graph[start] - visited:
dfs(graph, neighbors, visited)
```
其中,`graph` 表示存储图的邻接表,`start` 表示遍历的起始节点。在广度优先搜索中,使用队列存储待访问的节点,每次从队列首部取出一个节点并访问,将其未访问的邻居节点加入队列。在深度优先搜索中,使用递归的方式遍历当前节点的未访问邻居节点。在遍历过程中,使用集合 `visited` 存储已经访问过的节点,防止重复访问。
阅读全文