最短路径中的中间节点数

时间:2016-10-13 14:36:50

标签: python numpy scipy shortest-path

我正使用csgraph

中的scipy.sparse模块计算加权图表中的所有最短路径

我有一个N * N的矩阵(InputMatrix),我正在使用以下函数:

DijstraMatrix, DijkstraPredecessors=sp.sparse.csgraph.shortest_path(InputMatrix, method="D", return_predecessors=True)

我认为由于效率原因,每个节点的前驱列表不会返回显式路径。然后可以从DijkstraPredecessors列表重建任意两个节点i和j之间的最短路径。

我的问题是我需要最短路径来最大化访问节点的数量。如果我为一个大矩阵实现重建,则需要永远计算所有重建路径。

该函数以某种方式在内部计算该信息..是否有任何方法可以获得N * N矩阵,其中包含在i和j之间的最短路径中访问了多少个节点的信息?这是一种有效的计算方法吗?

这是我编码的那个:

    def SinglePath(DijkstraPredecesors, i, j):
        length=0
        k=j
        while (i != k) & (k >= 0):
            length+=1
            k = DijkstraPredecesors[i,k]
        return (length)

    def calculate_bi_longerpath(Distancias, DijkstraPredecesors):
        node1=-1
        node2=-1
        n_nodes=0
        distance=-1

        for i in range(0, Distancias.shape[0]):
            print(i)
            for j in range(0, Distancias.shape[1]):
                if(i<j):
                    path=SinglePath(DijkstraPredecesors, i, j)
                    if(path>n_nodes):
                        node1=i
                        node2=j
                        distance=Distancias[i][j]
                        n_nodes=path
        return(node1, node2, distance, n_nodes)


    print("Longest larger path...")
    node1, node2, n_nodes, distance=calculate_bi_longerpath(DijkstraMatrix, DijkstraPredecesors)
    print(node1, node2, n_nodes, distance)

0 个答案:

没有答案