给定一个矩阵(我将其表示为列表列表),如何在Python中从矩阵的左上角到右下角返回所有路径的列表?我在看 this link并尝试翻译成python。但它只能打印出路径。
如何将路径存储为列表列表?以下是具有适当数字的3X3矩阵的示例:
a = []
for i in range(3):
r = []
for j in range(3):
r.append(i+1)
a.append(r)
因此我将得到矩阵
1 1 1
2 2 2
3 3 3
我在python 2.7中的翻译代码
def printall(currentRow, currentColumn, nums):
if ( currentRow == len(a) - 1):
for i in range(currentColumn, len(a[0])):
nums.append(a[currentRow][i])
print nums
return
if (currentColumn == len(a[0]) - 1):
for i in range(currentRow, len(a)):
nums.append(a[i][currentColumn])
print nums
return
nums.append(a[currentRow][currentColumn])
printall(currentRow+1, currentColumn, nums)
printall(currentRow, currentColumn+1, nums)
print(printall(0,0,[]))
答案 0 :(得分:0)
主要问题是使用nums列表来保存路径。在每种情况下,您都会将引用传递给相同的列表,这会在您进行递归调用时混淆结果。用
替换它们printall(currentRow+1, currentColumn, nums[:])
printall(currentRow, currentColumn+1, nums[:])
这样做每次都会复制一份清单。
然后最后,为了测试它只是使用printall(0,0,[])
,你不需要在前面打印,因为你正在函数内进行所有打印。