我目前有一个带有单个末端顶点的有向无环图。顶点表示为具有一个或多个顶点引用的对象,它们可以指向它们。我能够找到从任何给定的开始到结束节点的所有节点路径,其中路径表示为节点对象列表。
现在,比方说,我正在检查一个有多个出口的节点。我想找到第一个节点,当前节点的所有路径都在这个节点上相遇。我可以得到每条路径到达终点然后遍历一条路径的节点,然后遍历每一条路径,直到找到这个节点,如果我没有&# 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;
}
}
答案 0 :(得分:1)
将正流分配给子图的每个边缘。使用有理数的数据可能最容易。从您的起始顶点开始作为流的来源1.在外边缘之间均匀划分。一路走到水槽。
现在每个顶点的流量都是1,它位于所有路径上。您只需找到最接近来源的