首页 > 其他 > 详细

生成树的直径求法

时间:2016-07-23 19:38:24      阅读:228      评论:0      收藏:0      [点我收藏+]

本来以为是一个比较难的算法,结果两遍bfs就可以了,不得不佩服那些大牛们。

先任取一个点u,一遍bfs找到距离它最远的点v,然后取vbfs一遍,最远的距离就是生成树的直径。

证明:

 1:若u为直径上的点,那么到u最远的点必定是直径的端点,假设直径端点是x,y且d{x,u}>d{y,u};当前最远点是v;那么如果的d{v,u} > d{x,u};那么d{v,u}+d{y,u} > d{x,y};与x,y是直径矛盾。

 2:u不在直径上,设m为直径上到u最近的点,设x,y为这条直径的端点且d{x,m} > d{y,m};由1知,对于m来说,在所有点中,m到x的距离最远,因为d{u,x} = d{u,m} + d{m,x};且取任意点z,必定存在d{u,z} <= d{u,m}+d{m,z};因为d{m,x}最大,z = x时所以d{u,z} 最大。所以到u最远的点必定是端点。

生成树的直径求法

原文:http://www.cnblogs.com/zstu-zy/p/5699309.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!