【樹結構】 無根樹轉有根樹
阿新 • • 發佈:2019-01-26
//輸入無根樹的結點個數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 | [英]ˈvektə(r) | [美]ˈvɛktɚ |
n. | 向量;航向;[生]帶菌者;[天]矢徑 |
vt. | 用無線電引導;為…導航 |
vector是C++標準模板庫中的部分內容,中文偶爾譯作“容器”,但並不準確。它是一個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。vector之所以被認為是一個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說,vector是一個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。