Algorithm 具有N个节点和N-1条边的连通图中的所有对最短路径

Algorithm 具有N个节点和N-1条边的连通图中的所有对最短路径,algorithm,Algorithm,我有一个有N个节点的图(2我在这里假设你的节点集有一个不相交的分区,由1到N/2的数字表示。我还假设“任何一对节点之间只有一条路径”,你实际上是指任何一对,而不仅仅是那些颜色相同的 在这种情况下,首先要意识到你的图形是一棵树。因此,任意地将它根化,然后以深度优先的顺序遍历它以计算所有节点的深度。注意,对于两个节点x和y,如果它们的最低共同祖先是l,那么 distance(x, y) = distance(x, l) + distance(y, l) = depth

我有一个有N个节点的图(2我在这里假设你的节点集有一个不相交的分区,由1到N/2的数字表示。我还假设“任何一对节点之间只有一条路径”,你实际上是指任何一对,而不仅仅是那些颜色相同的

在这种情况下,首先要意识到你的图形是一棵树。因此,任意地将它根化,然后以深度优先的顺序遍历它以计算所有节点的深度。注意,对于两个节点x和y,如果它们的最低共同祖先是l,那么

distance(x, y) = distance(x, l) + distance(y, l) 
               = depth(x) - depth(l) + depth(y) - depth(l) 
               = depth(x) + depth(y) - 2*depth(l)
您可以使用来计算(几乎)线性时间内所有对的LCA,并计算距离。在这种情况下,您甚至不需要存储LCA


运行时:O(n*α(n))与原始不相交集并集,O(n)与

优秀解决方案的改进。比简单的F/W更有效。@MarcoA。谢谢。F/W是什么?呃,Floyd Warshall..抱歉:p