//輸入無根樹的結點個數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ɚ |
vector是C++標準模板庫中的部分內容,中文偶爾譯作“容器”,但並不準確。它是一個多功能的,能夠操作多種資料結構和演算法的模板類和函數庫。vector之所以被認為是一個容器,是因為它能夠像容器一樣存放各種類型的對象,簡單地說,vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮資料。