2编程完成基于邻接表的图的非递归深度遍历和广度遍历
时间: 2024-02-12 18:06:45 浏览: 91
以下是基于邻接表的图的非递归深度遍历和广度遍历的 Python 代码:
```python
from collections import deque
class Graph:
def __init__(self, num_vertices):
self.num_vertices = num_vertices
self.adj_list = [[] for i in range(num_vertices)]
def add_edge(self, src, dest):
self.adj_list[src].append(dest)
self.adj_list[dest].append(src)
def dfs_iterative(self, start):
visited = [False] * self.num_vertices
stack = []
stack.append(start)
while stack:
vertex = stack.pop()
if not visited[vertex]:
visited[vertex] = True
print(vertex, end=' ')
for neighbor in self.adj_list[vertex]:
if not visited[neighbor]:
stack.append(neighbor)
def bfs_iterative(self, start):
visited = [False] * self.num_vertices
queue = deque()
queue.append(start)
visited[start] = True
while queue:
vertex = queue.popleft()
print(vertex, end=' ')
for neighbor in self.adj_list[vertex]:
if not visited[neighbor]:
visited[neighbor] = True
queue.append(neighbor)
```
其中,Graph 类中包含了一个邻接表和两个非递归遍历的方法 dfs_iterative 和 bfs_iterative。其中,dfs_iterative 是深度优先遍历的非递归实现,bfs_iterative 是广度优先遍历的非递归实现。我们可以使用 add_edge 方法向图中添加边。在遍历时,我们需要记录哪些节点已经被访问过,并使用一个栈(对于深度优先遍历)或队列(对于广度优先遍历)来保存需要遍历的节点。
阅读全文