编写一个图的实验程序,给定一个连通图,采用邻接表G存储,输出根结点为0的一棵深度优先生成树和一棵广度优先生成树。用相关数据进行测试。
时间: 2024-12-29 21:32:48 浏览: 15
编写一个图的实验程序通常需要使用一种编程语言,这里我们以Python为例,因为它简洁明了,并且有许多图形库如`networkx`可以方便地处理图结构。首先,我们需要导入必要的库:
```python
import networkx as nx
```
然后,我们可以创建一个简单的邻接表表示连通图:
```python
# 创建一个邻接表 G
G = {
0: [1, 2], # 根节点 0 的邻居
1: [0, 3],
2: [0, 4],
3: [1],
4: [2]
}
```
接下来,我们会分别用深度优先搜索(DFS)和广度优先搜索(BFS)算法生成两个生成树:
```python
def dfs_tree(G, root=0):
visited = {root}
stack = [root]
tree = []
while stack:
vertex = stack.pop()
tree.append(vertex)
for neighbor in G[vertex] - visited:
visited.add(neighbor)
stack.append(neighbor)
return tree
def bfs_tree(G, root=0):
visited = set([root])
queue = [root]
tree = []
while queue:
vertex = queue.pop(0)
tree.append(vertex)
for neighbor in G[vertex]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
return tree
```
现在我们可以运行这两个函数并打印结果:
```python
dfs_result = dfs_tree(G)
bfs_result = bfs_tree(G)
print(f"Depth First Search Tree (Root: {0}): {dfs_result}")
print(f"Breath First Search Tree (Root: {0}): {bfs_result}")
```
为了测试这个程序,你可以输入一些特定的图数据,比如添加更多节点和边,或者改变起始根节点,看看生成的树是否符合预期。同时,也可以尝试对不同类型的图(如有向图、无向图等)进行同样的操作。
阅读全文