在Python中查找最长矩阵路径长度的程序

假设我们有一个二元矩阵,其中 0 表示空单元格,1 表示墙。我们可以从第一行的任何空单元格开始,并希望以最后一行的任何空单元格结束。我们可以向左、向右或向下移动,我们必须找到最长的这样的路径,我们最多可以访问每个单元格一次。如果这不可能,则返回 0。

所以,如果输入是这样的

0000
0001
0000

那么输出将是 10,因为我们可以移动 (0, 3), (0, 2), (0, 1), (0, 0), (1, 0), (1, 1), (1, 2), (2, 2), (2, 1), (2, 0)。

示例

让我们看看以下实现以获得更好的理解 -

def solve(matrix):

   N = len(matrix)

   M = len(matrix[0])

   dp = [-1 for i in matrix[0]]

   for i in range(N):

      ndp = [-1 for j in matrix[0]]

      ndp2 = [-1 for j in matrix[0]]

      for j in range(M):

         if matrix[i][j] != 1 and (i == 0 or dp[j] > -1):

            ndp[j] = dp[j] + 1

            ndp2[j] = dp[j] + 1

      for j in range(1, M):

         if matrix[i][j] != 1 and ndp[j - 1] > -1:

            ndp[j] = max(ndp[j], ndp[j - 1] + 1)

      for j in range(M - 2, -1, -1):

         if matrix[i][j] != 1 and ndp2[j + 1] > -1:

            ndp2[j] = max(ndp2[j], ndp2[j + 1] + 1)

            ndp[j] = max(ndp[j], ndp2[j])

      dp = ndp

   return max(dp) + 1

matrix = [

[0, 0, 0, 0],

[0, 0, 0, 1],

[0, 0, 0, 0]

]

print(solve(matrix))

输入

[

[0, 0, 0, 0],

[0, 0, 0, 1],

[0, 0, 0, 0]

]

输出结果
10

以上是 在Python中查找最长矩阵路径长度的程序 的全部内容, 来源链接: utcz.com/z/351583.html

回到顶部