最近公共祖先(boost图)

4

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

如果没有,我希望能提供关于最佳方法的建议。 维基百科声称 有有效的算法可以在O(1)时间内实现这一点(具有O(n)预处理),但它没有描述算法。


是的,我的意思是在一棵树中。抱歉造成混淆。 - Amir Rachum
2个回答

3

维基百科 上找到了这个算法:

 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 + ".";

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接