在Python中查找完成所有发货的总成本的程序

在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。

在Python中查找完成所有发货的总成本的程序

要解决此问题,我们将执行以下步骤 –

  • n:ports的大小。
  • dist:从端口列表的邻接矩阵。
  • 对于j范围从0到n,执行以下操作:
    • 对于i范围从0到n,执行以下操作:
      • 对于k范围从0到n,执行以下操作:
      • dist [i,k] = dist [i,k],dist [i,j] + dist [j,k]的最小值
  • 对于所有形式的发货[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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程