2.图的深度遍历对任意给定的图(顶点数和边数自定),建立它的邻接表并输出
时间: 2024-02-19 22:57:20 浏览: 170
基于邻接表的BFS算法-数据结构(清华大学版)——图
好的,我可以为您展示一个图的深度优先遍历的示例代码,并以此建立邻接表:
```python
# 定义一个图类
class Graph:
# 初始化图,构建邻接表
def __init__(self, vertices):
self.vertices = vertices # 顶点数
self.adj_list = {} # 邻接表
# 初始化每个顶点的邻接表为空列表
for vertex in vertices:
self.adj_list[vertex] = []
# 添加边
def add_edge(self, u, v):
self.adj_list[u].append(v)
self.adj_list[v].append(u)
# 深度优先遍历
def dfs(self, vertex, visited):
visited.add(vertex) # 标记当前节点为已访问
print(vertex, end=' ')
# 遍历该节点的邻接表中的所有节点
for neighbor in self.adj_list[vertex]:
if neighbor not in visited: # 如果该邻居节点未被访问,则递归访问
self.dfs(neighbor, visited)
# 对图进行深度优先遍历,并输出邻接表
def traverse(self):
visited = set() # 初始化已访问节点集合为空
for vertex in self.vertices:
if vertex not in visited: # 如果该节点未被访问,则以该节点为起点进行深度优先遍历
self.dfs(vertex, visited)
print()
print("邻接表:")
for vertex in self.vertices:
print(vertex, "->", self.adj_list[vertex])
```
这里我们先定义了一个图类,包含顶点数和邻接表。在初始化时,我们将每个顶点的邻接表初始化为空列表。添加边的方法可以将边的两个端点加入对方的邻接表中。深度优先遍历的方法dfs将遍历当前节点的邻接表中的所有节点,并对未被访问的邻居节点递归调用自身。最后,我们定义了一个traverse方法,对图进行深度优先遍历,并输出邻接表。
接下来,我们可以使用这个类来构建一个图,并进行深度优先遍历,同时输出邻接表:
```python
# 创建一个包含5个顶点的图
vertices = ['A', 'B', 'C', 'D', 'E']
graph = Graph(vertices)
# 添加边
graph.add_edge('A', 'B')
graph.add_edge('A', 'C')
graph.add_edge('B', 'D')
graph.add_edge('C', 'D')
graph.add_edge('C', 'E')
graph.add_edge('D', 'E')
# 对图进行深度优先遍历
graph.traverse()
```
输出结果为:
```
A B D E C
邻接表:
A -> ['B', 'C']
B -> ['A', 'D']
C -> ['A', 'D', 'E']
D -> ['B', 'C', 'E']
E -> ['C', 'D']
```
这就是一个图的深度优先遍历和邻接表的实现方法。
阅读全文