给定一个无向图,输出指定顶点出发的深度优先遍历序列。在深度优先遍历的过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问,如果从初始点出发无法遍历到图中的所有顶点,第二行输出Non-connected。,给出C++代码
时间: 2023-12-03 15:42:01 浏览: 541
以下是给定一个无向图,输出指定顶点出发的深度优先遍历序列的C++代码:
```cpp
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
const int MAXN = 1005; // 最大顶点数
vector<int> graph[MAXN]; // 邻接表存储图
bool vis[MAXN]; // 标记是否访问过
void dfs(int u) {
vis[u] = true; // 标记已访问
cout << u << " "; // 输出遍历序列
sort(graph[u].begin(), graph[u].end()); // 邻接表排序
for (int i = 0; i < graph[u].size(); ++i) {
int v = graph[u][i];
if (!vis[v]) { // 如果v未访问,则继续遍历
dfs(v);
}
}
}
int main() {
int n, m, start;
cin >> n >> m >> start; // 顶点数、边数、起始顶点
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
graph[u].push_back(v);
graph[v].push_back(u); // 无向图,要加两条边
}
dfs(start); // 从起始顶点开始遍历
for (int i = 1; i <= n; ++i) {
if (!vis[i]) { // 如果存在未访问的顶点,则说明图不连通
cout << "Non-connected." << endl;
break;
}
}
return 0;
}
```
输入格式:第一行包括三个整数n、m、start,分别表示顶点数、边数和起始顶点。接下来m行,每行两个整数u、v,表示一条无向边。
输出格式:一行,表示指定顶点出发的深度优先遍历序列。如果从初始点出发无法遍历到图中的所有顶点,第二行输出Non-connected.
阅读全文