如何在Python 2.7中以2D矩阵的形式从左上角到右下角返回所有路径的列表?

时间:2017-02-03 15:42:04

标签: python-2.7

给定一个矩阵(我将其表示为列表列表),如何在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,[]))

1 个答案:

答案 0 :(得分:0)

主要问题是使用nums列表来保存路径。在每种情况下,您都会将引用传递给相同的列表,这会在您进行递归调用时混淆结果。用

替换它们
printall(currentRow+1, currentColumn, nums[:])
printall(currentRow, currentColumn+1, nums[:])

这样做每次都会复制一份清单。

然后最后,为了测试它只是使用printall(0,0,[]),你不需要在前面打印,因为你正在函数内进行所有打印。