通过BFS实现的最大距离



我知道你可以通过使用BFS两次来找到无向未加权图的直径或最大距离,我的问题是关于这个算法的细节。

如果我要实现这一点,我会真的只做两次BFS,它会返回最大距离吗?还是我必须在整个BFS算法中设置每个节点的距离和权重值,并计算新的最大值是否大于旧的最大值,等等?因为我听说如果你使用BFS,那么最后访问的值将是与原始节点的最大距离,这意味着我不需要做所有这些事情,对吧?

您必须从每个节点运行BFSn次。每次都必须从头开始计算距离:当您从其他节点v运行bfs时,与某个节点u的距离没有意义,因此您必须完全重新计算它们。

现在,对于每个节点v,您存储到任何其他节点的最大距离。图形的直径是这些最大值中的最大值。

然而,正如我从您的评论中了解到的,您正在为而不是一般图解决问题。在树的情况下,它更简单。从v的任何节点运行BFS。查找距离v最远的任何节点;设为d1。现在从节点d1再次运行BFS,并找到离它最远的任何节点;设为d2。然后,从d1d2的路径是树的直径(其中之一)。这个问题的答案是有证据的。

请注意,这两个BFS仍然从头开始计算所有距离。所以,是的,你只需要运行两次BFS。

最新更新