c++给定无向图的顶点数、边数以及边的信息,输出无向图深度优先搜索遍历序列。X组测试数据,对于每组测试数据, 第一行输入顶点数N(N<=100),边数M,数据之间空格分隔; 第二行输入M条边的信息(v1 v2表示边的顶点),数据之间由空格分隔。输出无向图深度优先搜索遍历序列,各顶点之间用空格分隔。
时间: 2024-03-21 21:37:59 浏览: 52
好的,这是一个比较常见的图算法问题,下面给出 C++ 的代码实现,供您参考:
```cpp
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 105;
bool vis[MAXN];
vector<int> G[MAXN];
vector<int> dfs_seq;
void dfs(int u) {
vis[u] = true;
dfs_seq.push_back(u);
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i];
if (!vis[v]) {
dfs(v);
}
}
}
int main() {
int n, m;
cin >> n >> m;
memset(vis, false, sizeof(vis));
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
dfs(i);
}
}
for (int i = 0; i < dfs_seq.size(); i++) {
cout << dfs_seq[i] << " ";
}
cout << endl;
return 0;
}
```
算法思路:
首先读入图的顶点数和边数,然后读入每条边的信息,使用邻接表存储图的信息。然后从每个未被访问的顶点开始进行深度优先搜索,将遍历到的顶点加入到遍历序列中,最后输出遍历序列即可。
时间复杂度:$O(n+m)$。
阅读全文