我必须模拟液体流过包含一组整数的方阵。液体应该从矩阵的左上角开始。它只能向右侧或相邻矩阵下方移动。相邻矩阵的值越低,其流动的可能性就越高。液体的运动被认为停止在矩阵的右边或下边。该程序应该能够显示液体通过的所有数字的总和。
import numpy as np
mtr= np.array ([[0, 2, 9],
[4, 9, 8],
[6, 8, 1]])
print(mtr)
def min_adj_val(a, b):
if (a < b):
return a
else:
return b
def min_mtr(mtr, m, n):
if (m == 2 or n == 2):
return mtr[m][n]
else:
return mtr[m][n] + min_adj_val(min_mtr(mtr, m+1, n),min_mtr(mtr, m, n+1))
print(min_mtr(mtr,0, 0))
以上代码输出:10
预计为:11
按照路径0-2-9,我希望它是11。但它选择了成本最低的路径,即0-4-6。我是初学者,刚学会编码大约4个月。请帮帮我。
每次对min_mtr
的调用都将返回从(0, 0)
到(m, n)
的最短路径。当您调用min_adj_val
时,您的参数是对min_mtr
的递归调用,这意味着您的函数所要做的就是保持迄今为止看到的最短路径长度,并将其添加到当前索引中。
一个更好的解决方案是编写一个贪婪函数,该函数选择最小相邻索引,并将其值添加到运行总数中,一直移动到达到边界。