Python中假设无向连通图采用邻接表存储,设计一个算法输出图G的一棵深度优先生成树的代码和主程序
时间: 2024-02-26 20:57:36 浏览: 93
以下是基于邻接表存储的无向连通图生成深度优先生成树的Python代码:
```
from collections import defaultdict
class Graph:
def __init__(self):
self.graph = defaultdict(list)
def add_edge(self, u, v):
self.graph[u].append(v)
self.graph[v].append(u)
def DFS(self, v, visited, parent):
visited[v] = True
for i in self.graph[v]:
if not visited[i]:
parent[i] = v
self.DFS(i, visited, parent)
def DFS_tree(self):
visited = [False] * len(self.graph)
parent = [-1] * len(self.graph)
for i in range(len(self.graph)):
if not visited[i]:
self.DFS(i, visited, parent)
return parent
# Sample input
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 3)
g.add_edge(2, 4)
g.add_edge(3, 5)
g.add_edge(4, 5)
# Output DFS tree
print(g.DFS_tree())
```
这里使用了defaultdict来存储邻接表,其中每个元素是一个列表,存储与该节点相邻的节点。在DFS_tree()函数中,首先初始化visited和parent数组,然后遍历每个节点,如果该节点未被访问,则调用DFS()进行深度优先遍历。在DFS()中,将当前节点标记为已访问,遍历与该节点相邻的节点,如果该节点未被访问,则将其标记为已访问,并将其父节点设置为当前节点。最后返回parent数组,即深度优先生成树的边集。
阅读全文