给定的是具有n个顶点和n-1个边连接所有顶点的图。我使用邻接列表来存储边缘。我想以最有效的方式找到不同节点对之间的路径(它们被视为输入)?怎么去呢?
编辑: 我还想将以前找到的路径存储在某个地方,这样如果已经直接或间接地找到了两个节点之间的路径,我就不必再找到它了。
答案 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)
选择一个节点作为根,并用其深度标记每个节点。
然后,给出指向两个节点的指针,向上移动更深的节点直到它们处于相同的深度,然后将它们向上移动直到它们相遇为止。