从任意起点开始,运行一次BFS,得到一个最远点d1,d1即为直径的一点

再运行一次BFS,得到一个最远点d2,则d1~d2为树的直径

为什么这样是对的?

(1)证明d1是树直径的一点

a) 若s在直径d1,d2上,则最后一个点必能搜到d1或d2;因为若搜到最后一个点为v,则直径为vd2,与题意不符

     b) 若s不在直径d1,d2上,BFS搜到的最远点为v,d1-d2为直径,根据连通图的性质,

            路径s-v当中必有一点t1,与路径d1-d2相连

算法导论22.2-7 .

根据d1-d2直径定义 d1d2=d2t2+t2d1,且t2d1>=t2t1+t1v,否则直径为d2-t2-t1-v

    根据v是BFS搜到的最远点,t1v>=t1t2+t2d1,最远点为d1

    根据两个不等式可得

    t1t2=0

t1v=t2d1

(2)通过d1进行BFS,最后搜到的点必为d2

因为若搜到最后一个点为v,则直径为vd1,与题意不符

 

转自:http://www.cnblogs.com/inpeace7/archive/2012/04/18/2454996.html

相关文章:

  • 2021-06-30
  • 2022-12-23
  • 2022-01-31
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2021-07-19
  • 2021-05-23
猜你喜欢
  • 2022-12-23
  • 2021-12-23
  • 2021-11-20
  • 2022-02-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案