我正在使用netwrokx使用Dijkstra算法计算不同顶点之间的最短路径。我有一种情况,我想连接三个不同的顶点(例如,无向图中的A,B和C)。首先,我找到了从A到B的最短路径,然后我想找到从A到B的最短路径。到目前为止,我一直在尝试计算从A到B的所有节点的最短路径长度。到C,然后从给出最小路径长度的节点计算出最短路径。由于路径可能具有多达200到300个节点,因此计算量很大。
任何人都可以给我提示如何改善方法吗?或更简单的方法来找到从现有边缘到目标的最短路径?
答案 0 :(得分:1)
向图形添加一个新节点'auxiliary'
。对于u
-A
路径中的每个节点B
,从u
到'auxiliary'
添加一条边。
找到从C
到'auxiliary'
的最短路径。通过删除最后一个节点'auxiliary'
截断该路径。这是从C
到该路径的最短路径。
更一般而言,只要您想找到从一个节点到一组节点的最短路径,并且(有一点概括性),它就会找到从一组节点到另一组节点的最短路径。
答案 1 :(得分:0)
shortest_path(G,源,目标)将返回两个顶点之间的最短路径。
如果通过实现Dijkstra算法来完成此方法,则效率渐近等于Dijkstra算法。