树中最长路径的公共段

时间:2013-03-07 14:44:05

标签: algorithm tree

我遇到了一个编程问题,其中一个将是

  1. 给出加权树。
  2. 一组感兴趣的节点,让我们称之为S。
  3. 我们需要返回最长理想路径中最短的公共段。 理想路径是在属于上面的集合S的顶点上开始和终止的路径。 不确定共同路径是否存在。 我知道在线性时间内找到树中最长的路径,并且我们可以很容易地将它扩展到理想路径的情况,但是2 dfs的经典算法不会有帮助。 找到最长的路径,但只是最长的路径长度。 谢谢。

1 个答案:

答案 0 :(得分:0)

如果你有:

  1. 路径开始
  2. 路径长度,来自DFS或BFS等算法
  3. 路径结束
  4. 您可以轻松获得路径。 更改代码:

    //current vertex is v, next is u, current length is l
    u.length = l + 1;
    u.visited = true;
    cont.push(u);
    

    添加行:

    u.previous = v;
    

    然后你可以通过以下方式找到路径:

    v = path_end;
    while(v != path_begin){
        //mark, v belongs to "path"
        v = v.previous
    }