📅  最后修改于: 2023-12-03 15:22:44.624000             🧑  作者: Mango
给定一个二维矩阵(Matrix),如果每个单元只能向上、下、左、右四个方向移动,定义从矩阵中的一个单元到达另一个单元的路径为从起点开始,依次沿着相邻的单元移动,到达目标单元的路径。且路径的成本为所经过的所有单元的值的和。
请你编写一个函数,计算到达矩阵中给定单元的所有路径的成本总和。
到达矩阵中给定单元的所有路径的成本总和
def calculate_cost(matrix, start, end):
"""
计算到达矩阵中给定单元的所有路径的成本总和
:param matrix: 二维矩阵
:param start: 起点单元
:param end: 目标单元
:return: 到达矩阵中给定单元的所有路径的成本总和
"""
if not matrix:
return 0
# 计算矩阵的行数和列数
row, col = len(matrix), len(matrix[0])
# 创建一个与矩阵大小相同的数组用于记录到每个单元的路径总成本
dp = [[0 for _ in range(col)] for _ in range(row)]
# 将起点的路径总成本置为起点单元的值
dp[start[0]][start[1]] = matrix[start[0]][start[1]]
# 按照四个方向遍历矩阵,并更新路径总成本
for i in range(start[0], end[0] + 1):
for j in range(start[1], end[1] + 1):
if i == start[0] and j == start[1]:
continue
elif i == start[0]:
dp[i][j] = dp[i][j-1] + matrix[i][j]
elif j == start[1]:
dp[i][j] = dp[i-1][j] + matrix[i][j]
else:
dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + matrix[i][j]
# 返回目标单元的路径总成本
return dp[end[0]][end[1]]
matrix = [[1,2,3],[4,5,6],[7,8,9]]
start = (0,0)
end = (2,2)
print(calculate_cost(matrix, start, end))
该函数通过动态规划算法来实现,具体操作如下:
该函数时间复杂度为O(n^2),空间复杂度为O(n^2)。