在Python中查找最长矩阵路径长度的程序
假设我们有一个二元矩阵,其中 0 表示空单元格,1 表示墙。我们可以从第一行的任何空单元格开始,并希望以最后一行的任何空单元格结束。我们可以向左、向右或向下移动,我们必须找到最长的这样的路径,我们最多可以访问每个单元格一次。如果这不可能,则返回 0。
所以,如果输入是这样的
0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 |
那么输出将是 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