Floyd
Floyd算法用于求解多源汇最短路,时间复杂度为O(n^3)
# 查询任意两点之间的最短距离
# n 所有点的数量
# m 所有边的数量
# q 查询次数
n, m, q = [int(x) for x in input().split(" ")]
d = [[float('inf')] * (n + 1) for _ in range(n + 1)]
def floyd():
for k in range(1, n + 1):
for i in range(1, n + 1):
for j in range(1, n + 1):
d[i][j] = min(d[i][j], d[i][k] + d[k][j])
for _ in range(m):
a, b, w = [int(x) for x in input().split(" ")]
d[a][b] = min(d[a][b], w)
floyd()
for _ in range(q):
a, b = [int(x) for x in input().split(" ")]
if d[a][b] == float('inf'):
print(-1)
else:
print(d[a][b])
最后更新于
这有帮助吗?