图的深度优先遍历和广度优先遍历代码实现
时间: 2023-10-04 18:09:55 浏览: 138
图的深度优先遍历和广度优先遍历算法
5星 · 资源好评率100%
以下是图的深度优先遍历和广度优先遍历的代码实现,以邻接表形式存储图:
```python
# 图的深度优先遍历
def DFS(graph, start):
visited = set() # 记录已经访问过的节点
stack = [start] # 用栈来实现深度优先遍历
while stack:
node = stack.pop()
if node not in visited:
visited.add(node)
print(node)
# 将所有未访问的邻居节点入栈,实现深度优先遍历
stack.extend([n for n in graph[node] if n not in visited])
# 图的广度优先遍历
def BFS(graph, start):
visited = set() # 记录已经访问过的节点
queue = [start] # 用队列来实现广度优先遍历
while queue:
node = queue.pop(0)
if node not in visited:
visited.add(node)
print(node)
# 将所有未访问的邻居节点入队列,实现广度优先遍历
queue.extend([n for n in graph[node] if n not in visited])
```
其中,`graph` 表示邻接表形式存储的图,`start` 表示起始节点。在遍历时,用 `visited` 集合记录已经访问过的节点,防止重复访问。在深度优先遍历中,用栈来实现,每次取出栈顶元素并访问,再将其所有未访问的邻居节点入栈。在广度优先遍历中,用队列来实现,每次取出队首元素并访问,再将其所有未访问的邻居节点入队列。
阅读全文