利用Floyd算法进行矩阵运算,可以快速求出所有顶点的最短距离。
其核心思想是将顶点依次带入权重矩阵中,重新计算矩阵中的最优值,python实现如下:
def floyd(matrix):
for node in range(len(matrix)):
for i, value in enumerate(matrix):
if i == node:
continue
for j in range(len(value)):
if j == node or i == j:
continue
if matrix[i][node] + matrix[node][j] < matrix[i][j]:
matrix[i][j] = matrix[i][node] + matrix[node][j]
return matrix
if __name__ == '__main__':
M = 999
m = [[0, 1, M, 4],
[M, 0, 9, 2],
[3, 5, 0, 8],
[M, M, 6, 0]]
p = [[-1, 0, -1, 0],
[-1, -1, 1, 1],
[2, 2, -1, 2],
[-1, -1, 3, -1]]
res = floyd(m)
print(res)