您的位置:首页 > 其它

无根树转有根树的一般方法

2015-11-29 18:25 162 查看
紫书:P352

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int p[100];
vector<int> G[100];  //邻接表
int n;

void read_tree()
{
int u,v;
cin>>n;
for(int i=0;i<n-1;i++)
{
cin>>u>>v;            //只是告知边,没有从属关系
G[u].push_back(v);
G[v].push_back(u);
}
}

void dfs(int u,int fa)
{
//使u成为与他相连之边的父节点
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(v!=fa) dfs(v,p[v]=u);
}
}

int main()
{
while(1)
{
read_tree();
memset(p,0,sizeof(p));
int root;
cin>>root;
p[root]=-1;
dfs(root,-1);
for(int i=0;i<=n-1;i++)
cout<<p[i]<<" ";
cout<<"\n";
}
return 0;
}


View Code
测试数据:

8

0 1

0 2

0 3

1 4

1 5

5 6

5 7

1

结果:

1 -1 0 0 1 1 5 5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: