import sys
sys.setrecursionlimit(1000000)
n, m = map(int, input().split(" "))
grid = [list(map(int, input().split())) for i in range(n)]
cache = [[0] * m] * n
cnt = 0
def dfs(grid, i, j):
global cnt
dir = [[1, 0], [-1, 0], [0, 1], [0, -1]]
if not 0 <= i < len(grid) or not 0 <= j < len(grid[0]) or cache[i][j] == 1:
return
cache[i][j] = 1
for k in range(4):
xi = i + dir[k][0]
yi = j + dir[k][1]
if grid[xi][yi] < grid[i][j] and cache[xi][yi] == 0:
cnt += 1
dfs(grid, xi, yi)
maxcnt = 0
for i in range(n):
for j in range(m):
if cache[i][j] == 0:
cnt = 0
dfs(grid, i, j)
maxcnt = (maxcnt, cnt)
print(maxcnt)
或者
# 此题为dfs或bfs,我们使用深度优先搜索
# 初始化递归深度
sys.setrecursionlimit(300000)
# 接收键盘输入
n, m = map(int, input().split())
heights = [list(map(int, input().split())) for _ in range(n)]
# 定义四个方法
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 初始化距离矩阵
dist = [[0] * m for _ in range(n)]
# 定义dfs方法
def dfs(x, y):
if dist[x][y] > 0: # 表示该点测算guo
return dist[x][y]
dist[x][y] = 1 # 记忆化
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < n and 0 <= ny < m and heights[nx][ny] < heights[x][y]:
dist[x][y] = max(dist[x][y], dfs(nx, ny) + 1) # 此步骤属于动态规划
return dist[x][y] # 最终返回该点距离
# 遍历素有位置,求出最大距离
ans = 0
for i in range(n):
for j in range(m):
ans = max(ans, dfs(i, j))
print(ans)