给定一个无向图,输出指定顶点出发的深度优先遍历序列。在深度优先遍历的过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问, 输入格式: 第一行输入三个正整数,分别表示无向图的顶点数N(1≤N≤1000,顶点从1到N编号)、边数M和指定起点编号S。接下来的M行对应M条边,每行给出两个正整数,分别是该条边的端点编号。 输出格式: 输出从S开始的深度优先遍历序列,用一个空格隔开,最后也含有一个空格。如果从S出发无法遍历到图中的所有顶点,第二行输出Non-connected。
时间: 2023-12-03 07:42:57 浏览: 318
数据结构-3期(KC002) 无向图的深度优先遍历.docx
以下是使用Python实现的代码:
```python
n, m, s = map(int, input().split())
graph = [[] for _ in range(n + 1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
for i in range(n):
graph[i + 1].sort()
visited = [False] * (n + 1)
dfs_order = []
def dfs(v):
visited[v] = True
dfs_order.append(v)
for u in graph[v]:
if not visited[u]:
dfs(u)
dfs(s)
if len(dfs_order) != n:
print('Non-connected')
else:
print(' '.join(map(str, dfs_order)), end=' ')
```
首先根据输入的边构建无向图,使用邻接表存储。由于需要优先选择编号最小的待访问顶点,因此在每个邻接表中,将顶点按编号排序。
然后定义一个`visited`数组记录每个顶点是否已经被访问过。使用`dfs_order`数组记录深度优先遍历的顺序。
最后,从指定顶点`s`开始进行深度优先遍历,如果遍历到的顶点数量不等于图中的顶点数量,则说明不是连通图,输出`Non-connected`;否则输出遍历顺序。
阅读全文