因此,在这里,我们编写了一些非常丑陋的代码,其目的是在给定任意大小的矩阵的情况下,找到从矩阵的中心导航到拐角之一的最高成本路径,并返回一个表示成本的int值。穿过那条路。
在这种情况下,如果大小为2或3,但程序没有其他大小,则程序可以正常工作。
如果大小为1,则会出现超出范围的错误,但是如果大小为4或更大,它将简单地返回0。我知道该错误在maxCostPaths函数中,但我无法弄清楚是什么原因引起的。
我注意到,当maxCostPaths填满时,maxCostPath矩阵将跳过右侧,因此最终得到一个看起来像这样的矩阵。
[0,1,2,0]
[3,4,5,0]
[4,5,6,0]
[5.6.8.0]
我也知道这段代码太可怕了,所以如果有人可以建议/演示一种通过动态编程来实现这一目标的更好方法,请告诉我。
cost = max(maxCostPathBottomLeft(building), maxCostPathBottomRight(building), maxCostPathTopLeft(building),
maxCostPathTopRight(building))
print("Cost to reach : ", cost)
def maxCostPaths(matrix):
maxCostPath = [[0 for x in range(len(matrix))] for y in range(len(matrix))]
print(len(matrix))
for i in range(0, int(len(matrix)/2) + 2):
aboveCost = maxCostPath[i - 1][0]
maxCostPath[i][0] = aboveCost + matrix[i][0]
for j in range(0, int(len(matrix)/2 + 2)):
leftCost = maxCostPath[0][j - 1]
maxCostPath[0][j] = leftCost + matrix[0][j]
for i in range(0, int(len(matrix)/2) + 2):
for j in range(0, int(len(matrix)/2) + 2):
leftCost = maxCostPath[i - 1][j]
aboveCost = maxCostPath[i][j - 1]
maxCostPath[i][j] = matrix[i][j] + max(leftCost, aboveCost)
print(maxCostPath)
print(maxCostPath[len(matrix) - 1][len(matrix) - 1])
return maxCostPath[len(matrix) - 1][len(matrix) - 1]
def maxCostPathBottomRight(matrix):
maxCostPath = [[0 for x in range(matrix.size + 1)] for y in range(matrix.size + 1)]
center = int(matrix.size)
b = 0
for a in range(center, matrix.size * 2 + 1):
d = 0
for c in range(center, matrix.size * 2 + 1):
maxCostPath[b][d] = matrix.rooms[a][c].food
d += 1
b += 1
return maxCostPaths(maxCostPath)
def maxCostPathBottomLeft(matrix):
maxCostPath = [[0 for x in range(matrix.size + 1)] for y in range(matrix.size + 1)]
center = int(matrix.size)
b = 0
for a in range(center, matrix.size * 2 + 1):
d = 0
for c in range(0, matrix.size + 1):
maxCostPath[b][d] = matrix.rooms[a][c].food
d += 1
b += 1
return maxCostPaths(maxCostPath)
def maxCostPathTopRight(matrix):
maxCostPath = [[0 for x in range(matrix.size + 1)] for y in range(matrix.size + 1)]
center = int(matrix.size)
b = 0
for a in range(center, matrix.size * 2 + 1):
d = 0
for c in range(0, matrix.size + 1):
maxCostPath[b][d] = matrix.rooms[a][c].food
d += 1
b += 1
return maxCostPaths(maxCostPath)
def maxCostPathTopLeft(matrix):
maxCostPath = [[0 for x in range(matrix.size + 1)] for y in range(matrix.size + 1)]
center = int(matrix.size)
b = 0
for a in range(0, matrix.size + 1):
d = 0
for c in range(0, matrix.size + 1):
maxCostPath[b][d] = matrix.rooms[a][c].food
d += 1
b += 1
return maxCostPaths(maxCostPath)