n * n矩阵中的所有可能路径 - python

Posted

技术标签:

【中文标题】n * n矩阵中的所有可能路径 - python【英文标题】:All possible paths in n*n matrix - python 【发布时间】:2015-09-14 00:51:38 【问题描述】:

我正在尝试解决一个面试问题:

给定一个 n*n 矩阵,假设您从左上角的单元格(即 0,0)开始。您可以向右或向下移动,并且您必须前往右下角的单元格。获取小于给定值的最大值。例如,假设 3*3 矩阵,给定值为5

0 1 2
2 1 2
3 2 1

optimal path is 0 -> 1 -> 1 -> 2 -> 1 = 5

我开始使用递归进行编码,但答案不正确。有什么建议吗?

def findAllPaths(currX, currY, path, grid, sum):
    #print currX, currY
    if currX == len(grid)-1:
        i = currY
        temp = 0
        while i < len(grid):
            path = path + str(grid[currX][i])
            temp += grid[currX][i]
            i += 1
        sum.append(temp)
        #print 'first loop', sum, path
        return
    if currY == len(grid)-1:
        i = currX
        temp = 0
        while i < len(grid):
            path = path + str(grid[i][currY])
            temp += grid[i][currY]
            i += 1
        sum.append(temp)
        #print 'second loop', sum, path
        return
    #print currX, currY
    #path = path + str(grid[currX][currY])
    findAllPaths(currX+1,currY,path,grid, sum)
    findAllPaths(currX, currY+1,path,grid, sum)

    return sum

【问题讨论】:

【参考方案1】:

您添加到 sum 和 path 而不删除任何内容。这对于递归函数来说是有问题的,因为您将尝试一条路径,并且当您回溯时,您不会删除这些路径。您需要复制 (cpysum = sum[:]) 或在递归后删除内容但找不到解决方案。

【讨论】:

【参考方案2】:

我正在使用动态编程来完成这项任务。通过找到路径的最小值,程序只需要计算当前值+上一步的最小值。

def minPathSum(grid):
        res = 0
        if grid:
            n,m = len(grid),len(grid[0])
            dp = [[0]* m for _ in range(n)]
            dp[0][0]= grid[0][0]
            for i in range(1,m):
                dp[0][i] = dp[0][i-1] + grid[0][i]
            for i in range(1,n):
                dp[i][0] = dp[i-1][0]+grid[i][0]

            for i in range(1,n):
                for j in range(1,m):
                    dp[i][j] = grid[i][j]
                    dp[i][j] += min(dp[i][j-1],dp[i-1][j])

            res = dp[-1][-1]
        return res

grid = [ [0,1,2],[2 ,1 ,2],[3 ,2 ,1]]
print(minPathSum(grid))

【讨论】:

以上是关于n * n矩阵中的所有可能路径 - python的主要内容,如果未能解决你的问题,请参考以下文章

dfs模板找起点到终点的所有可能路径

矩阵链应用程序中的所有可能分组

移动度数为 8 时矩阵中的最小成本路径

Leetcode练习(Python):数组类:第54题:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

回溯(Flash back)学习

Python 基础练习 PAT水题