设计一个程序,依次从有向图中的每个顶点深度优先搜索遍历操作;邻接矩阵作为存储结构。算法思想: (1) 定义图的顺序存储结构; (2) 创建有向图,采用邻接矩阵表示(调用CreateDG函数实现),具体实现如下: 输入图的顶点数和边数; 依次输入顶点的信息存入顶点表中; 初始化邻接矩阵,使每个权值初始化为0; 构造邻接矩阵;(需调用LocateVex函数获取顶点在顶点表中的下标) (3) 依次从每个顶点进行深度优先搜索,并输出访问序列(调用DFSTraverse函数实现;另需调用相关函数实现获取第一个和下一个邻接点的操作)。 注意:顶点数据仅为1个数字或1个字符。 输入说明: 第一行输入图的顶点数n和边数m; 第二行依次输入n个顶点的数据; 接下来m行的每行输入一条边的信息。 输出说明: 输出n行,每行输出从第i(0≤i<n)个顶点深度优先搜索的访问序列,序列中的连通分量用{}括起来,无空格间隔,{}为英文半角的符号。
时间: 2023-07-15 13:15:47 浏览: 114
数据结构-c语言-带main函数-图7.3-图的遍历-深度优先搜索-递归方法-邻接矩阵-有向图。
以下是Python实现:
```python
MAXV = 100 # 最大顶点数
class Graph:
def __init__(self):
self.vertex_num = 0 # 顶点数
self.edge_num = 0 # 边数
self.vertexes = [] # 顶点表
self.adj_matrix = [[0] * MAXV for _ in range(MAXV)] # 邻接矩阵
def create(self):
self.vertex_num, self.edge_num = map(int, input().split())
self.vertexes = [input() for _ in range(self.vertex_num)]
for i in range(self.vertex_num):
self.adj_matrix[i][i] = 1 # 自己到自己的路径权值为1
for _ in range(self.edge_num):
start, end = map(int, input().split())
self.adj_matrix[start][end] = 1
def dfs_traverse(self):
visited = [False] * MAXV # 记录顶点是否被访问过
for i in range(self.vertex_num):
if not visited[i]: # 如果顶点未被访问过,则从该顶点开始进行深度优先搜索
visited[i] = True
print("{", self.vertexes[i], end="")
self.dfs(i, visited)
print("}")
def dfs(self, v, visited):
for i in range(self.vertex_num):
if self.adj_matrix[v][i] == 1 and not visited[i]:
visited[i] = True
print(",", self.vertexes[i], end="")
self.dfs(i, visited)
g = Graph()
g.create()
g.dfs_traverse()
```
输入样例:
```
5 6
0 1 2 3 4
0 1
0 2
1 2
2 0
2 3
3 4
```
输出样例:
```
{ 0, 1, 2 }
{ 3, 4 }
```
阅读全文