【发布时间】:2018-01-25 04:33:16
【问题描述】:
我正在编写一些代码来计算给定二维数组中表示三角形的最短路径。这是使用DP来获得解决方案,它需要输出路径而不是最终成本。我知道它正在填充数组自下而上的样式,但是一旦输出正确的成本,我将实施回溯。
这是我目前拥有的代码。出于某种原因,它只是将数字连接起来,而不是像添加字符串那样将其拆分。
with open("small_triangle.txt") as textFile:
perm = [line.split() for line in textFile]
output = [None] * len(perm)
lines = perm
for j in range(len(lines)):
print(lines[j])
output[0] = lines[0][0]
for x in range(len(lines)-2, 0, -1):
for y in range(0 , x):
if(lines[x+1][y] < lines[x+1][y+1]):
output[x] = lines[x+1][y]
lines[x][y] += lines[x+1][y]
else:
output[x] = lines[x+1][y+1]
lines[x][y] += lines[x+1][y+1]
print(output)
#for i in range(len(output)):
# print("\n"+output[i])
给定这个二维数组
['79']
['82', '04']
['86', '93', '64']
['34', '30', '17', '44']
['41', '79', '83', '33', '86']
['10', '34', '55', '92', '26', '23']
['54', '84', '30', '79', '40', '30', '65']
['94', '64', '79', '36', '79', '78', '72', '36']
['12', '88', '25', '57', '72', '37', '37', '45', '26']
['92', '24', '07', '07', '04', '48', '25', '60', '54', '72']
这是它输出的数组
['79', '8630793430365704', '17332630723725', '332630723725', '2630723725', '30723725', '723725', '3725', '54', None]
【问题讨论】:
-
您在“三角形”中的值是字符串,您需要将它们全部转换为 int 否则加法 (+) 将连接字符串而不是添加整数。
-
当我这样做时,例如
int(arr elm)我得到cannot call this function on ints,还有其他方法可以做到这一点。我更精通 Java,所以这有点令人困惑,谢谢! -
你能举个例子说明你是如何尝试转换为 int 的吗?
-
在我正在做的 for 循环中,
output[x] = int(lines[x+1][y])只是为了测试它,它仍然输出相同的连接输出。没有错误,虽然有点混乱 -
您需要在任何操作之前强制转换为 int,请参阅下面的答案。
标签: python arrays python-3.x dynamic-programming