# 定义一个函数,用于找到矩阵中的最长递增路径
def longestIncreasingPath(matrix):
# 如果矩阵为空,返回0
if not matrix:
return 0
# 获取矩阵的行数和列数
m, n = len(matrix), len(matrix[0])
# 初始化一个二维数组,用于存储以每个元素为结尾的最长递增路径的长度,初始值都为1
dp = [[1] * n for _ in range(m)]
# 定义一个深度优先搜索的函数
def dfs(i, j):
# 如果dp[i][j]大于1,直接返回dp[i][j],避免重复计算
if dp[i][j] > 1:
return dp[i][j]
# 定义四个方向:右、下、左、上
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
for dx, dy in directions:
# 计算新的坐标位置
x, y = i + dx, j + dy
# 如果新的坐标位置在矩阵内,并且该位置的值大于当前位置的值
if 0 <= x < m and 0 <= y < n and matrix[x][y] > matrix[i][j]:
# 更新以当前位置为结尾的最长递增路径的长度
dp[i][j] = max(dp[i][j], dfs(x, y) + 1)
# 返回以当前位置为结尾的最长递增路径的长度
return dp[i][j]
# 初始化最长路径的长度为0
max_len = 0
# 遍历矩阵中的每个元素
for i in range(m):
for j in range(n):
# 更新最长路径的长度
max_len = max(max_len, dfs(i, j))
# 返回最长路径的长度
return max_len