#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
vector<int>v[100005]; //此时的v已经相当于一个可任意变大小的二维数组
int city[100005];
void DFS(int n)
{
for (int i = 0; i<v[n].size(); ++i) // 和 n 每个相邻的 城市都遍历一次
{
if (city[v[n][i]])
continue;
city[v[n][i]] = n;
DFS(v[n][i]);
}
}
int main()
{
int n, m, t, i, a, b;
scanf("%d", &t);
while (t--)
{
memset(city, 0, sizeof(city));
memset(v, 0, sizeof(v));
scanf("%d%d", &n, &m);
city[m] = -1;
for (i = 0; i<n - 1; i++)
{
scanf("%d%d", &a, &b);
v[a].push_back(b); // a和 b 相连
v[b].push_back(a); // 当然 b 也和 a 相连
}
DFS(m); // 从第几个城市开始
for (i = 1; i <= n; i++)
printf("%d ", city[i]);
printf("\n");
}
return 0;
}南阳理工20题
最新推荐文章于 2024-06-18 20:35:58 发布
本文展示了一个使用C++实现的深度优先搜索(DFS)算法示例,该算法用于在一个图中查找所有可达节点,并标记这些节点所属的连通分量。通过递归方式遍历图的所有边和顶点,解决实际问题中的连通性分析。
669

被折叠的 条评论
为什么被折叠?



