这是一个更紧密地遵循原始问题中所链接的MIT解决方案集的证明。为了清楚起见,我将使用与它们相同的符号,以便可以更轻松地进行比较。
ababp(a,b)d(a,b)s≠a,bs=abud(s,u)=maxxd(s,x)
引理0:和均为叶节点。ab
证明:如果它们不是叶节点,则可以通过将端点扩展到叶节点来增加,这与是直径相反。d(a,b)d(a,b)
引理1:。max[d(s,a),d(s,b)]=d(s,u)
证明:为了矛盾起见,假设和都严格小于。我们来看两种情况:d(s,a)d(s,b)d(s,u)
情况1:路径不不包含顶点。在这种情况下,不能为直径。要知道为什么,让为与距离最小的唯一顶点。然后,我们看到,因为。类似地,我们还将具有。这与是直径矛盾。p(a,b)sd(a,b)tp(a,b)sd(a,u)=d(a,t)+d(t,s)+d(s,u)>d(a,b)=d(a,t)+d(t,b)d(s,u)>d(s,b)=d(s,t)+d(t,b)>d(t,b)d(b,u)>d(a,b)d(a,b)
情况2:路径包含顶点。在这种情况下,再次不能是直径,因为对于某些顶点,使得,和大于。p(a,b)sd(a,b) ud(s,u)=maxxd(s,x)d(a,u)d(b,u)d(a,b)
引理1给出了为什么我们从第一个BFS 的最后发现的顶点开始第二个广度优先搜索的原因。如果是与的最大距离的唯一顶点,那么根据引理1,它必须是某个路径的端点之一,且距离等于直径,因此,以为根的第二BFS 无疑会找到直径。另一方面,如果至少还有一个顶点使得,那么我们知道直径为,无论我们是从还是开始第二个BFS都没有关系。û š ù v d (小号,v )= d (小号,Û )d (一,b )= 2 d (小号,Û )ü vuusuvd(s,v)=d(s,u)d(a,b)=2d(s,u)uv