如何有效地在图中的所有节点对之间找到路径?

时间:2018-04-03 12:42:13

标签: graph

给定的是具有n个顶点和n-1个边连接所有顶点的图。我使用邻接列表来存储边缘。我想以最有效的方式找到不同节点对之间的路径(它们被视为输入)?怎么去呢?

编辑: 我还想将以前找到的路径存储在某个地方,这样如果已经直接或间接地找到了两个节点之间的路径,我就不必再找到它了。

2 个答案:

答案 0 :(得分:1)

如果你在每个节点上拥有自己的父亲你可以上到根,逐步建立到根的路径,然后比较你是否在另一个路径中找到相同的节点(来自另一个节点的节点)到根)。

root ---a---b---c---d---e
        |
        f---g---h---i
            |
            j---k---l

在这个例子中,你想从c到i。

i的根路径 - > {i,h,g,f,a,root}

c的根路径 - > {c,b} 中断 //在我的列表中找到相同的节点(" a")

创建一个新列表,其中包含c列表和反向i列表,从0到(索引为" a")

从c到i的路径 - > {c,b,a,f,g,h,i}

        a---b---c
        |
        f---g---h---i

答案 1 :(得分:0)

选择一个节点作为根,并用其深度标记每个节点。

然后,给出指向两个节点的指针,向上移动更深的节点直到它们处于相同的深度,然后将它们向上移动直到它们相遇为止。