Python程序:计算完成所有货运的总成本
假设我们有一个列表列表,称为ports,其中ports[i]表示端口i连接到的端口列表。我们还有另一个列表列表,称为shipments,其中每个列表的序列[i, j]表示从端口i到端口j有一个货运请求。从端口i到端口j的运输成本是这两个端口之间最短路径的长度,我们需要找到完成所有货运所需的总成本。
因此,如果输入类似于ports = [[1, 4],[2],[3],[0, 1],[]] shipments = [[1, 4]],则输出将为4,因为路径是从1 -> 2 -> 3 -> 0 -> 4。
为了解决这个问题,我们将遵循以下步骤:
- n := ports的大小
- dist := 从ports列表生成的邻接矩阵
- 对于j从0到n,执行:
- 对于i从0到n,执行:
- 对于k从0到n,执行:
- dist[i, k] = dist[i, k],dist[i, j] + dist[j, k]的最小值
- 对于k从0到n,执行:
- 对于i从0到n,执行:
- 对于所有形式为[i, j]的货运请求,创建一个列表dist[i,j],其中dist[i,j]不是无穷大。
- 返回生成的列表的总和。
让我们看看下面的实现,以更好地理解。
示例
class Solution: def solve(self, ports, shipments): n = len(ports) INF = 10 ** 10 dist = [[INF for _ in range(n)] for _ in range(n)] for i in range(n): dist[i][i] = 0 for i in range(n): for j in ports[i]: dist[i][j] = 1 for j in range(n): for i in range(n): for k in range(n): dist[i][k] = min(dist[i][k], dist[i][j] + dist[j][k]) return sum(dist[i][j] for i, j in shipments if dist[i][j] != INF) ob = Solution() ports = [[1, 4],[2],[3],[0, 1],[]] shipments = [[1, 4]] print(ob.solve(ports, shipments))
输入
[[1, 4],[2],[3],[0, 1],[]], [[1, 4]]
输出
4
广告