我有一个给定图表的最小生成树(MST)。我试图计算任何两个顶点的唯一子路径(应该是MST的一部分,而不是图形),但我找不到有效的方法。
到目前为止,我已经使用Kruskal的算法(使用不相交数据结构)来计算MST(例如:10个顶点A到J)。但是现在我想计算C到C之间的子路径E ..或J到C(假设图是无向的)。
任何建议将不胜感激。
答案 0 :(得分:1)
如果您只想要其中一条路径,那么在树上执行DFS可能是最简单的解决方案,具体取决于您存储树的方式。如果它是一个正确的图形,那么执行DFS很容易,但是,如果您只存储父指针,则可能更容易找到两个节点中最不共同的祖先。
为此,您可以从节点u,v走到根r,然后比较r-> u和r-> v路径。它们不同的第一个节点是最不常见的祖先。
通过线性预处理,您可以在恒定时间内回答最不常见的祖先查询。如果要经常查找节点对之间的路径,可能需要考虑实现该数据结构。我认为This paper解释得非常好。