算法导论22.2-7

从任意起点开始,运行一次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相连

 .

根据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

转载于:https://www.cnblogs.com/freewater/archive/2012/05/06/2485594.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值