c++ - 最低共同祖先( boost 图)

标签 c++ boost graph

boost 中是否有内置方法来查找树中两个或多个节点的最低公共(public)祖先(这是一个 boost::graph 实例)?

如果没有,我将不胜感激有关执行此操作的最佳方法的建议。 Wikipedia claims有有效的算法可以在 O(1) 时间内实现这一点(使用 O(n) 预处理),但它没有描述算法。

最佳答案

Wikipedia中找到算法:

 function TarjanOLCA(u)
 MakeSet(u);
 u.ancestor := u;
 for each v in u.children do
     TarjanOLCA(v);
     Union(u,v);
     Find(u).ancestor := u;
 u.colour := black;
 for each v such that {u,v} in P do
     if v.colour == black
         print "Tarjan's Least Common Ancestor of " + u +
               " and " + v + " is " + Find(v).ancestor + ".";

关于c++ - 最低共同祖先( boost 图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075856/

相关文章:

graph - 如何为Sphinx中的所有模块添加继承图?

C++ 对多个类使用相同的 ADT 结构

c++ - QQuickWindow 上下文属性?

c++ - 将可变参数模板参数转发给类似 printf 的函数

r - 为什么我的 GLM 的预测值是周期性的?

javascript - 使用具有特定移动规则的 DFS 生成迷宫

c++ - 在运行时向对象添加函数集合

c++ - 尝试按值返回对象时出现无效指针错误

c++ - 使用内存映射文件进行序列化

c++ - 如何为在boost python中作为元组的一部分返回的对象指定返回策略