给定一个无向图,输出指定顶点出发的深度优先遍历序列。在深度优先遍历的过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问, 输入格式: 第一行输入三个正整数,分别表示无向图的顶点数N(1≤N≤1000,顶点从1到N编号)、边数M和指定起点编号S。接下来的M行对应M条边,每行给出两个正整数,分别是该条边的端点编号。 输出格式: 输出从S开始的深度优先遍历序列,用一个空格隔开,最后也含有一个空格。如果从S出发无法遍历到图中的所有顶点,第二行输出Non-connected。 输入样例: 5 4 2 1 2 2 3 5 2 1 3 输出样例: 2 1 3 5 Non-connectedc++代码
时间: 2023-12-03 21:43:07 浏览: 89
实验六 图(算法与数据结构)
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1010;
vector<int> graph[N];
bool visited[N] = {false};
void dfs(int u) {
visited[u] = true;
cout << u << ' ';
for (auto v : graph[u]) {
if (!visited[v]) {
dfs(v);
}
}
}
int main() {
int n, m, s;
cin >> n >> m >> s;
while (m--) {
int a, b;
cin >> a >> b;
graph[a].push_back(b);
graph[b].push_back(a);
}
for (int i = 1; i <= n; i++) {
sort(graph[i].begin(), graph[i].end());
}
dfs(s);
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
cout << '\n' << "Non-connected";
return 0;
}
}
return 0;
}
```
阅读全文