在有向无环图中找到路径的第一个汇合点

时间:2013-12-02 17:23:16

标签: performance language-agnostic graph-theory

我目前有一个带有单个末端顶点的有向无环图。顶点表示为具有一个或多个顶点引用的对象,它们可以指向它们。我能够找到从任何给定的开始到结束节点的所有节点路径,其中路径表示为节点对象列表。

现在,比方说,我正在检查一个有多个出口的节点。我想找到第一个节点,当前节点的所有路径都在这个节点上相遇。我可以得到每条路径到达终点然后遍历一条路径的节点,然后遍历每一条路径,直到找到这个节点,如果我没有&# 39;找到它然后我去路径一的下一个节点。然而,这似乎非常低效,因为我必须检查每个路径中的每个节点的第一个路径的长度。以下是我的解决方案。有没有办法提高效率?

for each (exitNode){
    pathList.addAll(exitNode.getPathsToSink());
}
for each (node in pathList(0)){
    bool isMeetNode = true;
    int i = 1;
    while (i < pathList.size && isMeetNode){
        i++
        isMeetNode = pathList(i).contains(node)//checks each node in the path
    }
    if (isMeetNode){
        return node;
    }
}

1 个答案:

答案 0 :(得分:1)

流分配给子图的每个边缘。使用有理数的数据可能最容易。从您的起始顶点开始作为流的来源1.在外边缘之间均匀划分。一路走到水槽。

现在每个顶点的流量都是1,它位于所有路径上。您只需找到最接近来源的