Python nxn矩阵中从原点(0,0)到(n,n)的最高和路径

Python nxn矩阵中从原点(0,0)到(n,n)的最高和路径,python,Python,我一直在试图找到以下问题的解决方案: 有一个给定大小为nxn的矩阵。 您从(0,0)开始,并希望达到(n,n)。 您只能向上和向右(不能向下或向左)迈步。 通过这种方式可以获得的最大和是什么?通过哪条路径 我可以在代码中找到最高的总和,但找不到路径。请帮我一把伙计们:) 在填写maxPath时,跟踪路径可能是最简单的方法。您还没有说明如何存储路径,所以我将假设一个按顺序排列的单元格坐标列表将帮助您开始。例如: path=[(0,0)、(0,1)、(1,1)]#从(0,0)开始到(0,1),然后到

我一直在试图找到以下问题的解决方案: 有一个给定大小为nxn的矩阵。 您从(0,0)开始,并希望达到(n,n)。 您只能向上和向右(不能向下或向左)迈步。 通过这种方式可以获得的最大和是什么?通过哪条路径

我可以在代码中找到最高的总和,但找不到路径。请帮我一把伙计们:)


在填写
maxPath
时,跟踪路径可能是最简单的方法。您还没有说明如何存储路径,所以我将假设一个按顺序排列的单元格坐标列表将帮助您开始。例如:

path=[(0,0)、(0,1)、(1,1)]#从(0,0)开始到(0,1),然后到(1,1)
就像通过从
矩阵中添加值来构建
maxPath
一样,通过将单元格的坐标“添加”(放在列表的末尾)到上一个单元格的路径来构建任何单元格的路径

def maxPath(矩阵):
#确定矩阵的大小
m=3;
n=3;
#开始时将所有单元格的最大值设置为“0”
maxPath=[[0表示范围(n+1)中的x]表示范围(m+1)中的y]
#一个数组来存储我找到的路径
path=[[范围(n+1)中的x为无]范围(m+1)中的y为无]
#将第一个起始单元格的最大值作为其自身的值
maxPath[0][0]=矩阵[0][0]
路径[0][0]=[(0,0)]#到第一个单元的路由简单地是(0,0)
#计算第一列中每个单元格的最大和
对于范围(1,m+1)内的i:
下=最大路径[i-1][0]
maxPath[i][0]=下方+矩阵[i][0]
#到单元[i][0]的路径是到单元[i-1][0]的路径,后跟(i,j)
#复制该路径,然后为(i,0)添加一个额外元素
路径[i][0]=列表(路径[i-1][0])+[(i,0)]
#计算第一行中每个单元格的最大和
对于范围(1,n+1)内的j:
左=最大路径[0][j-1]
maxPath[0][j]=左+矩阵[0][j]
路径[0][j]=列表(路径[0][j-1])+[(0,j)]
#计算网格其余部分每个单元格的最大和
对于范围(1,m+1)内的i:
对于范围(1,n+1)内的j:
左=最大路径[i-1][j]
下=最大路径[i][j-1]
如果左>下方:
maxPath[i][j]=矩阵[i][j]+左
路径[i][j]=列表(路径[i-1][j])+[(i,j)]
其他:
maxPath[i][j]=矩阵[i][j]+如下
路径[i][j]=列表(路径[i][j-1])+[(i,j)]
返回最大路径[m][n],路径[m][n]
最高Sumpath,路径=最大路径(mat)
打印(“最高金额为:”,最高金额路径)#最高金额为:65
打印(“所采用的路径:,路径)#所采用的路径:[(0,0)、(1,0)、(2,0)、(3,0)、(3,1)、(3,2)、(3,3)]
注意,这不是大型阵列的最佳解决方案-它计算到
maxPath
中每个单元的路径。这可能会占用很多空间。。。您可以通过向后遍历
maxPath
,从位置左下方的
矩阵
maxPath
的值计算出每一步的来源来避免这种情况。但是,这与您的起始代码有很大不同

# Forming a matrix
mat=[[0,0,20,4],
     [4,5,3,6],
     [1,3,5,2],
     [50,4,6,0]]

def maxPath(matrix):
    # Determine the size of the matrix
    m=3;
    n=3;
    
    # Giving all the cells max value as '0' for a start 
    maxPath=[[0 for x in range(n+1)]for y in range(m+1)]
    
    #Giving the first start cell max value as it's own value
    maxPath[0][0]=matrix[0][0]
    
    
    # Calcuating max-sum for each cell in the first column
    for i in range (1,m+1):
        below = maxPath[i-1][0]
        maxPath[i][0] = below + matrix[i][0]
    
    # Calcuating max-sum for each cell in the first row
    for j in range (1,n+1):
        left = maxPath[0][j-1]
        maxPath[0][j] = left + matrix[0][j]   
    
    # Calcuating max-sum for each cell for the rest of the grid
    for i in range (1,m+1):
        for j in range (1,n+1):
            left = maxPath[i-1][j]
            below = maxPath[i][j-1]  
            maxPath[i][j] = matrix[i][j] + max(left, below)
    return maxPath[m][n]

highestSumPath = maxPath(mat)
print("Highest-sum is: ",highestSumPath)