我意识到你可以通过两次使用BFS找到无向未加权图的直径或最大距离,我的问题是关于这个算法的具体细节。
如果我要实现这一点,我真的只会做BFS两次,它会返回最大距离?或者我必须在整个BFS算法中设置每个节点的距离和重量值,并计算新的最大值是否大于旧的最大值等?因为我听说如果你使用BFS,那么最后一次访问的值将是你原始节点的最大距离,这意味着我不需要做所有这些事情,对吗?
答案 0 :(得分:1)
您必须从每个节点运行BFS n 次。每次都必须从头开始计算距离:当您从某个其他节点 v 运行bfs时,距离某个节点 u 的距离没有任何意义,因此您必须完全重新计算它们。 / p>
现在,对于每个节点 v ,您可以存储到任何其他节点的最大距离。图表的直径是这些最大值的最大值。
但是,正如我从您的评论中所理解的那样,您正在解决树而不是一般图表的问题。在树的情况下,它更简单。从任何节点 v 运行BFS。从 v 中找到任何最远的节点;让它成为 d1 。现在从节点 d1 再次运行BFS,并从中找到任何最远的节点;让它成为 d2 。然后,从 d1 到 d2 的路径是树的直径(其中之一)。 this问题的答案中有一个证明。
请注意,这两个BFS仍然可以从头开始计算所有距离。所以是的,你只需要运行两次BFS。