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