算法如下,采取DFS遍历
#include <iostream>
#include<vector>
#include<cstring>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int p[100];//用来记录父亲节点
vector<int> g[100];
void dfs(int u,int fa){//深度优先搜索寻找父节点
int d=g[u].size();
for(int i=0;i<d;i++){
int v=g[u][i];
if(v!=fa) dfs(v,p[v]=u);
}
}
int main(int argc, char** argv) {
int n;
cin>>n;
int u,v;
for(int i=0;i<n;i++){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}//生成无根树
int root;
cin>>root;
memset(p,0,sizeof(p));
p[root]=-1;
dfs(root,-1) ;
return 0;
}