A38881. 编程实现有一个N*M的矩阵,且矩阵中每个方格中都有一个整数(0<=整数≤100),小蓝需要按照以下要求从矩阵中找出一条最长的移动路线,且输出最长路线的长度(1个方格为1个长度)。要求:1.小蓝可以从矩阵中任意一个方格开始向它的上、下、左、右相邻的任意一个方格移动,且移动的路线不能有交叉;2.小蓝每次所要移动到的方格中的整数都要小于当前所在方格中的整数(如当前所在的方格中的整数为3,那么可以移动到…
填空题
困难
知识点
题目描述
编程实现
有一个N*M的矩阵,且矩阵中每个方格中都有一个整数(0<=整数≤100),小蓝需要按照以下要求从矩阵中找出一条最长的移动路线,且输出最长路线的长度(1个方格为1个长度)。
要求:
1.小蓝可以从矩阵中任意一个方格开始向它的上、下、左、右相邻的任意一个方格移动,且移动的路线不能有交叉;
2.小蓝每次所要移动到的方格中的整数都要小于当前所在方格中的整数(如当前所在的方格中的整数为3,那么可以移动到数字为0,1,2的格子里,不可以移动到数字为3,4,5 ... 的格子里);
例如:N=3,M=3,矩阵方格如下:

参考答案
n=m=3
ls=[[1,1,3],[2,3,4],[1,0,1]]
ls_t=[[0]*m for _ in range(n)]
def f (i,j) :
if ls_t[i][j]==0 :
if i-1>=0 and ls[i-1][j]<ls[i][j] :
a=f(i-1,j)
else :
a=0
if i + 1 < n and ls[i+1][j] < ls[i][j]:
b = f(i+1, j)
else:
b = 0
if j - 1 >= 0 and ls[i][j-1] < ls[i][j]:
c = f(i, j-1)
else:
c = 0
if j + 1 < m and ls[i][j+1] < ls[i][j]:
d = f(i, j+1)
else:
d = 0
ls_t[i][j]= max(a,b,c,d)+1
return ls_t[i][j]
上一题
下一题