通过BFS实施的最大距离?

时间:2017-11-16 18:46:57

标签: algorithm graph-theory breadth-first-search

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

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

1 个答案:

答案 0 :(得分:1)

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

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

但是,正如我从您的评论中所理解的那样,您正在解决而不是一般图表的问题。在树的情况下,它更简单。从任何节点 v 运行BFS。从 v 中找到任何最远的节点;让它成为 d1 。现在从节点 d1 再次运行BFS,并从中找到任何最远的节点;让它成为 d2 。然后,从 d1 d2 的路径是树的直径(其中之一)。 this问题的答案中有一个证明。

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