树结构 无根树转有根树
Posted gavanwanggw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树结构 无根树转有根树相关的知识,希望对你有一定的参考价值。
//输入无根树的结点个数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是一个可以存放随意类型的动态数组,可以添加和压缩数据。
以上是关于树结构 无根树转有根树的主要内容,如果未能解决你的问题,请参考以下文章