实现图的深度优先遍历 实现图的广度优先遍历
时间: 2023-12-18 20:28:38 浏览: 73
Java实现图的深度优先遍历和广度优先遍历
5星 · 资源好评率100%
实现图的深度优先遍历可以使用递归或者栈来实现。具体步骤如下:
1. 从起始节点开始,将其标记为已访问。
2. 对于当前节点的每个未访问的邻居节点,递归调用深度优先遍历函数。
3. 重复步骤2,直到所有节点都被访问过。
以下是一个使用递归实现的Python代码示例:
```python
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start)
for next_node in graph[start] - visited:
dfs(graph, next_node, visited)
return visited
```
其中,graph是一个字典,表示图的邻接表;start是起始节点;visited是一个集合,用于记录已经访问过的节点。
实现图的广度优先遍历可以使用队列来实现。具体步骤如下:
1. 将起始节点加入队列,并标记为已访问。
2. 从队列中取出一个节点,访问它的所有未访问的邻居节点,并将它们加入队列。
3. 重复步骤2,直到队列为空。
以下是一个使用队列实现的Python代码示例:
```python
from collections import deque
def bfs(graph, start):
visited, queue = set(), deque([start])
visited.add(start)
while queue:
vertex = queue.popleft()
print(vertex)
for neighbor in graph[vertex]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
```
其中,graph是一个字典,表示图的邻接表;start是起始节点。
阅读全文