题目名称:无根树变有根树
题目链接:无根树变有根树
描述
给定一棵包含 N 个节点的无根树,小Hi想知道如果指定其中某个节点 K 为根,那么每个节点的父节点是谁?
输入
第一行包含一个整数 N 和 K。1 ≤ N ≤ 1000, 1 ≤ K ≤ N。
以下N-1行每行包含两个整数 a 和 b,代表ab之间存在一条边。 1 ≤ a, b ≤ N。
输入保证是一棵树。
输出
输出一行包含 N 个整数,分别代表1~N的父节点的编号。对于 K 的父节点输出0。
样例输入
5 4
1 2
3 1
4 3
5 1
样例输出
3 1 4 0 1
解题思路
思路不难,按照搜索算法直接搜索就可以,并记录每个节点的父节点即可
完整代码
#include<bits/stdc++.h>
using namespace std;
#define n 1010
int N,K,a,b;
int table[n];
bool vis[n];
vector<int> v[n];
void bfs(int s){
vis[s]=true;
for(int i=0;i<v[s].size();i++){
int now=v[s][i];
if(!vis[now]){
table[now]=s;
bfs(now);
}
}
}
int main()
{
cin>>N>>K;
for(int i=0;i<N-1;i++){
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
memset(vis,0,sizeof(vis));
bfs(K);
for(int i=1;i<N;i++){
cout<<table[i]<<' ';
}
cout<<table[N]<<endl;
return 0;
}