能解决什么问题
找出树中最长的路径
算法思想
- 任取一点,求该点到其他点的距离,找到离它最远的点 u
- 求 u 到其他点的距离,找到离 u 最远的点 v
- u -> v 就是树的最长路径
由反证法易证:u 是树直径的一个端点
代码
bfs(1);
int u = -1;
for (int i = 1; i <= n; i++)
if (u == -1 || dist[i] > dist[u])
u = i;
bfs(u);
int v = -1;
for (int i = 1; i <= n; i++)
if (v == -1 || dist[i] > dist[v])
v = i;