/*算法竞技赛入门经典 11.1.1 无根树转化为有根树
* */
import java.util.Scanner;
import java.util.Vector;
public class TreeConvert {
static final int MAXN = 20;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Vector<Integer>[] g = new Vector[MAXN];
for (int i = 0; i < MAXN; i++) {
g[i] = new Vector<Integer>();
}
int u, v;
int n = scanner.nextInt();
for (int i = 0; i < n - 1; i++) {
u = scanner.nextInt();
v = scanner.nextInt();
g[u].add(v);
g[v].add(u);
}
int[] p = new int[n];
p[g[0].get(0)] = -1;
TreeConvert tc = new TreeConvert();
tc.dfs(p, g[0].get(0), -1, g);
for (int i = 0; i < n; i++) {
System.out.println("the father of " + i + " is " + p[i]);
}
}
private void dfs(int[] p, int u, int fa, Vector<Integer>[] g) {
// 递归转化以u为根的子树 u的父亲是fa
int d = g[u].size();// 节点u的相邻节点个数
for (int i = 0; i < d; i++) {
int v = g[u].get(i);// 节点u的第i个相邻节点
if (v != fa)
dfs(p, v, p[v] = u, g);// 把v的父亲设置为u,并递归转化以v为根的子树
}
}
}
输入示例
8
0 1
0 2
0 3
1 4
1 5
5 6
5 7
输出示例
the father of 0 is 1
the father of 1 is -1
the father of 2 is 0
the father of 3 is 0
the father of 4 is 1
the father of 5 is 1
the father of 6 is 5
the father of 7 is 5