【问题标题】:Find the maximum distance in between a given pair of nodes in graph [closed]查找图中给定节点对之间的最大距离[关闭]
【发布时间】:2021-09-23 06:36:49
【问题描述】:

有 N 个节点由 N-1 条边连接。每条边的权重为 1,可以从任何其他节点到达任何节点。

我们得到了一个节点子集。我们需要对节点子集进行配对(1对1映射)并找到配对后可能的最大距离。

For example:
N = 8 ( Number of nodes) 
subset of nodes = [2,4,5,6]

Graph: 

   7
   |
6--1--2--8 
   | 
   3--4
   | 
   5

Solution
Maximum distance: 
    Pairs
    (2,4) : 2-1-3-4 => distance 3 
    (6,5) : 6-1-3-5 => distance 3 
    max distance = 3+3 = 6
    It's possible to form other pairs but max distance will always comes out to 6.

如何计算最大距离?

【问题讨论】:

  • 这不是一个真正的编程问题。您可能想尝试查看计算机科学堆栈交换网站。

标签: algorithm graph-theory


【解决方案1】:

首先找到树的质心。 接下来对每对顶点执行以下操作: 求顶点与树形心之间的距离。这些值的总和就是顶点之间的最大距离。

【讨论】:

  • 我认为这不是真的。想象一下有 101 个顶点标记为 0、1、...、99、100 的路径图;对于每个 i,在 i,i+1 之间都有一条边。考虑子集 {99, 100}。树的质心是顶点 50;您建议的值的总和为 (99-50)+(100-50) = 99。但最大距离为 1。
【解决方案2】:

首先,因为有n 节点,而n-1 边总是连接它们,所以这一定是一棵树。

假设子集的长度,k

显而易见的方法是为所有 k 节点运行 bfs,它将为您提供与子集节点的所有距离。

然后,我们可以做一个嵌套循环 (k^2) 来找出哪一对距离最大。

或者,我们可以保留一个max_distance 变量,并在运行bfs 时更新max_distance,它会去掉额外的k^2 术语。

我们可以使用 LCA 进一步优化这一点。一旦我们选择了一个根并获得了 LCA,我们就可以通过 d(node1, node2) = d(node1) + d(node2) - 2 x lca(node1, node2) 轻松找到任何距离对

【讨论】:

    猜你喜欢
    • 2012-09-01
    • 2011-10-12
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多