的列表遞歸發生器我有2個降級名單看起來像:上列出
[[1,2,3,],
[4,5,6],
[7,8,9]]
我想寫一個發生器,產生「路徑」的總和。
「路徑」從左上角開始,只在x + 1和y + 1上,直到到達最後一個元素(右下角)。
例如,有效路徑是1=>2=>5=>6=>9 (sum=23)
。
無-有效的路徑可能是1=>2=>5=>**4**=>
...
到目前爲止,我有這樣的代碼:
my_list = [[0, 2, 5], [1, 1, 3], [2, 1, 1]]
def gen(x, y, _sum):
if x + 1 <= len(my_list):
for i1 in gen(x + 1, y, _sum + my_list[y][x]):
yield _sum
if y + 1 <= len(my_list):
for i2 in gen(x, y + 1, _sum + my_list[y][x]):
yield _sum
yield _sum + my_list[y][x]
g = gen(0, 0, 0)
total = 0
for elm in g:
total += elm
print total
我得到的錯誤:
for i2 in gen(x, y+1, _sum+my_list[y][x]):
IndexError: list index out of range
那麼最新的問題? – Kasramvd 2014-12-02 20:27:07
大概你想找到通過矩陣的*最大*路徑。如果是這樣,蠻力產生所有可能的路徑並不是解決這個問題的最好方法。相反,用較小的矩陣來解決問題;給定單元格的最大總和是上方和左側單元格的相同值的最大值加上當前值。 – 2014-12-02 20:28:41
由於您已經知道矩陣的*左上角*單元格的最大路徑值,因此可以輕鬆地爲每個其他單元格計算最大路徑值,從而爲您提供最後整個矩陣的最大路徑值。所需要的只是矩陣上的一個NxM循環。 – 2014-12-02 20:30:00