【树结构】 无根树转有根树
//输入无根树的结点个数n。输入n-1条边(u, v),输入欲指定的根的编号root,建立以root为根的树
/*可变长数组 一个有maxn行 当时每行长度能够不同的数组
用于表示树中结点间的关系
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 1000;
vector<int> G[maxn]; //STL中的可变长数组
int n, root, p[maxn];
void dfs(int u, int fa) //递归转化以U为根的子树。 U的父亲为fa
{
int d = G[u].size();
for(int i = 0; i < d; i++)
{
const int& v = G[u][i];
if(v != fa)
dfs(v, p[v] = u);
}
}
int main()
{
int u, v;
scanf("%d", &n);
for(int i = 0; i < n-1; ++i)
{
scanf("%d %d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
scanf("%d", &root);
p[root] = -1;
dfs(root, -1);
for(int i = 0; i < n; ++i)
printf("p[%d] = %d\n", i, p[i]);
return 0;
}
/*
输出格式 p[该节点] = 该节点父亲
比如 p[5] = 1; 结点5的父亲是1;
当该节点为根节点 则相应的为-1
*/
vector_百度翻译
| vector | [英]ˈvektə(r) | [美]ˈvɛktɚ |
| n. | 矢量;航向;[生]带菌者;[天]矢径 |
| vt. | 用无线电引导;为…导航 |
vector是C++标准模板库中的部分内容,中文偶尔译作“容器”。但并不准确。
它是一个多功能的,可以操作多种数据结构和算法的模板类和函数库。vector之所以被觉得是一个容器,是由于它可以像容器一样存放各种类型的对象,简单地说。vector是一个可以存放随意类型的动态数组,可以添加和压缩数据。
posted on 2017-04-18 15:26 gavanwanggw 阅读(327) 评论(0) 收藏 举报
浙公网安备 33010602011771号