#include <iostream>
#include <cstring>
using namespace std;
int map[1123][1123]; /// 储存图
int vis[1123]; /// 标记该点是否已被访问
int ans[1123]; /// 储存遍历序列
int p;
void dfs(int k, int n)
{
vis[k] = 1;
ans[p++] = k;
for(int i = 0; i < n; i++)
{
if(!vis[i] && map[k][i]) /// 如果两点相连并且未被访问过 则在该处递归
{
dfs(i,n);
}
}
}
int main()
{
int m, n;
int t;
cin >> t;
while(t--)
{
cin >> n >> m;
int u, v;
p = 0;
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
while(m--)
{
cin >> u >> v;
map[u][v] = map[v][u] = 1;/// 此时将邻接矩阵两点赋值为1 表示两点相连
}
dfs(0,n);
for(int i = 0; i < p; i++)
{
i + 1 == p ? cout << ans[i] << endl : cout << ans[i] << " ";
}
}
return 0;
}
图的深度遍历
最新推荐文章于 2022-12-19 11:25:22 发布