Floyd算法最短路径

时间:2020-01-29 05:48:02

标签: floyd-warshall

我已经写了下面的代码,它适用于最短距离,但不适用于最短路径,

         import math
         def floyd(dist_mat):
         n=len(dist_mat)
         p=[[0]*n]*n
            for k in range(n):
                for i in range(n):
                    for j in range(n):
                        if dist_mat[i][j]>dist_mat[i][k]+dist_mat[k][j]:
                            dist_mat[i][j] = dist_mat[i][k] + dist_mat[k][j]
                            p[i][j] = k+1
            return p

        if __name__ == '__main__':
             print(floyd([[0,5,9999,9999],
                   [50,0,15,5],
                   [30,9999,0,15],
                   [15,9999,5,0]]))

此代码的结果是:[[4, 1, 4, 2], [4, 1, 4, 2], [4, 1, 4, 2], [4, 1, 4, 2]]
真实结果是:[[0, 0, 4, 2], [4, 0, 4, 0], [0, 1, 0, 0], [0, 1, 0, 0]]

很高兴收到您关于它为什么会出错的想法

0 个答案:

没有答案
相关问题