建图是关键,,C++提供的STL很好用vector容器,vector<int>map 建立名为map,类型为int的一维动态数组,可以扩容,vector<int>map[10] 建立10行,列数不限的二维数组,由题意可知,遍历图时需要保存其父节点即可,所以pri[]是用来存放父节点的数组
//深搜,存储父节点的编号,C++STL vector存储图,邻接表形式
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<vector>
using namespace std;
int pre[100005]; //用于存储父亲节点,数组下标为当前节点标号,存放其父节点
vector<int>v[100005]; //vector容器建立v数组
void dfs(int s){ //图的深搜
for(int i=0;i<v[s].size();i++){
if(!pre[v[s][i]]){
pre[v[s][i]]=s;
dfs(v[s][i]);
}
}
}
int main(){
int M;
cin>>M;
while(M--){
int N,S;
memset(pre,0,sizeof(pre));
memset(v,0,sizeof(v));
cin>>N>>S;
pre[S]=-1;
for(int i=0;i<N-1;i++){ //建立无向图
int x,y;
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
dfs(S); //从输入的起始位置开始搜索
for(int i=1;i<=N;i++)
cout<<pre[i]<<' ';
cout<<endl;
}
//system("pause");
return 0;
}