使用两次BFS,第一次BFS在任意位置,所找到的最远端点是直径的一个端点。第二次BFS从第一次BFS得到的最远端开始,两次得到的端点间的这条路径即为最长路径。
证明;
一:第一次BFS得到的最远端是直径的一个端点。
若开始点V是直径上的点,必然到达的最远端是直径上某端点(反证)
若不是则必然与直径相交,若从V至最远端的这条路径与直径不相交,则从最远端到V再抵达直径某端点这条路径必然远于直径。因此到达的最远端依然是直径上某端点。
二:第二次到达的是直径的一端是由第一次已找到直径另一端所保证的。