树的直径

Posted on 2023-02-18 21:09  lyc2002  阅读(12)  评论(0编辑  收藏  举报

能解决什么问题

找出树中最长的路径

算法思想

  • 任取一点,求该点到其他点的距离,找到离它最远的点 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;