设计一个数据结构图的程序,要求:1、实现图的存储,输出存储结构示意图;2、输出对建立的图进行深度优先搜索和广度优先搜索所得的遍历序列
时间: 2024-02-25 11:51:29 浏览: 68
好的,这是一个比较复杂的问题,需要分步骤来解决。首先,我们需要确定数据结构的选择,接着需要实现图的存储和遍历算法。下面是一个基于邻接表的图的数据结构示例和遍历算法的实现示例:
## 数据结构示例
```python
class Graph:
def __init__(self, vertices):
self.V = vertices
self.adj = [[] for i in range(vertices)]
def add_edge(self, u, v):
self.adj[u].append(v)
self.adj[v].append(u)
def print_graph(self):
for i in range(self.V):
print("Adjacency list of vertex {}\n head ".format(i), end="")
for j in self.adj[i]:
print("-> {}".format(j), end="")
print(" \n")
```
这个类包括了初始化图和添加边的方法,以及打印图的邻接表结构。
## 深度优先遍历算法
```python
def DFSUtil(v, visited, graph, result):
visited[v] = True
result.append(v)
for i in graph.adj[v]:
if visited[i] == False:
DFSUtil(i, visited, graph, result)
def DFS(graph):
visited = [False] * graph.V
result = []
for i in range(graph.V):
if visited[i] == False:
DFSUtil(i, visited, graph, result)
return result
```
这个算法使用了递归的方式进行深度遍历。它接收一个Graph对象和一个起始顶点作为输入,并返回遍历结果。
## 广度优先遍历算法
```python
from collections import deque
def BFS(graph):
visited = [False] * graph.V
result = []
queue = deque()
for i in range(graph.V):
if visited[i] == False:
queue.append(i)
visited[i] = True
while queue:
s = queue.popleft()
result.append(s)
for j in graph.adj[s]:
if visited[j] == False:
queue.append(j)
visited[j] = True
return result
```
这个算法使用了队列进行广度遍历。它接收一个Graph对象作为输入,并返回遍历结果。
最后,我们可以使用这些方法来创建一个图,并输出它的邻接表结构和遍历结果:
```python
g = Graph(4)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 3)
g.print_graph()
print("DFS traversal:")
print(DFS(g))
print("BFS traversal:")
print(BFS(g))
```
输出结果:
```
Adjacency list of vertex 0
head -> 1-> 2
Adjacency list of vertex 1
head -> 0-> 2
Adjacency list of vertex 2
head -> 0-> 1-> 3
Adjacency list of vertex 3
head -> 2
DFS traversal:
[0, 1, 2, 3]
BFS traversal:
[0, 1, 2, 3]
```
这个程序可以实现图的存储和遍历,输出存储结构示意图和遍历序列。
阅读全文