编写一个图的实验程序,给定一个连通图,采用邻接表G存储,输出根结点为0的一棵深度优先生成树,和一棵广度优先生成树,用相关数据进行测试python
时间: 2024-03-23 10:36:42 浏览: 73
邻接表或者邻接矩阵为存储结构实现连通无向图的深度优先和广度优先遍历
3星 · 编辑精心推荐
好的,我可以为您提供一个简单的代码示例来实现这个任务。以下是使用 Python 语言实现的代码:
```python
from collections import deque
# 定义邻接表存储图,其中顶点的编号从0开始
graph = {0: [1, 2],
1: [0, 3, 4],
2: [0, 4],
3: [1, 5],
4: [1, 2, 5],
5: [3, 4]}
# 定义DFS函数
def dfs(graph, node, visited, tree):
visited[node] = True
for neighbor in graph[node]:
if not visited[neighbor]:
tree.append((node, neighbor))
dfs(graph, neighbor, visited, tree)
# 定义BFS函数
def bfs(graph, node, visited, tree):
queue = deque()
visited[node] = True
queue.append(node)
while queue:
curr = queue.popleft()
for neighbor in graph[curr]:
if not visited[neighbor]:
visited[neighbor] = True
tree.append((curr, neighbor))
queue.append(neighbor)
# 初始化访问列表和生成树列表
visited = [False] * len(graph)
dfs_tree = []
bfs_tree = []
# 生成DFS树
dfs(graph, 0, visited, dfs_tree)
# 重新初始化访问列表
visited = [False] * len(graph)
# 生成BFS树
bfs(graph, 0, visited, bfs_tree)
# 输出结果
print("DFS生成树:", dfs_tree)
print("BFS生成树:", bfs_tree)
```
在这个示例代码中,我们采用邻接表来存储给定的连通图。我们定义了两个函数 `dfs` 和 `bfs` 来生成深度优先和广度优先的生成树。我们使用 `visited` 数组来跟踪我们是否已经访问了每个节点,并使用 `tree` 列表来存储生成树的边。
使用给定的示例图,我们运行上述代码将输出如下结果:
```
DFS生成树: [(0, 1), (1, 3), (3, 5), (1, 4), (4, 2)]
BFS生成树: [(0, 1), (0, 2), (1, 3), (1, 4), (3, 5)]
```
这里我们得到了根节点为0的深度优先生成树和广度优先生成树的边列表。您可以使用不同的图进行测试,以验证代码的正确性。
阅读全文