3.滑行 - 蓝桥云课 (lanqiao.cn)
问题描述
小蓝准备在一个空旷的场地里面滑行,这个场地的高度不一小蓝用一个n行m列的矩阵来表示场地,矩阵中的数值表示场地的高度
如果小蓝在某个位置,而他上、下、左、右中有一个位置的高度(严格)低于当前的高度,小蓝就可以滑过去,滑动距离为o
如果小蓝在某个位置,而他上、下、左、右中所有位置的高度都大于等于当前的高度,小蓝的滑行就结束了。
小蓝不能滑出矩阵所表示的场地
小蓝可以任意选择一个位置开始滑行,请问小蓝最多能滑行多远距离。
输入格式
输入第一行包含两个整数 n,m,用一个空格分隔
接下来n行,每行包含m个整数,相邻整数之间用一个空格分隔,依次表示每个位置的高度
输出格式
输出一行包含一个整数,表示答案
import os
import sys
# 请在此输入您的代码
n,m=map(int,input().split())
changdi=[]
for i in range(n):
column=list(map(int,input().split()))
changdi.append(column)
direction=[(1,0),(-1,0),(0,1),(0,-1)]
flag=[[-1]*m for _ in range(n)] #记录每个起点开始所能到达的最远距离
def dfs(x,y): #x行坐标,y列坐标
if flag[x][y] !=-1: #已经搜索过这个起点
return flag[x][y]
ans=1 #最远距离
for d in direction:
x_next=x+d[0]
y_next=y+d[1]
if 0<=x_next<n and 0<=y_next<m and changdi[x_next][y_next] < changdi[x][y]:
ans=max(dfs(x_next,y_next)+1,ans)
flag[x][y]=ans
return ans
res=0
for i in range(n):
for j in range(m):
res=max(dfs(i,j),res)
print(res)
标签:位置,高度,flag,小蓝,场地,滑行
From: https://blog.csdn.net/weixin_72050316/article/details/137171763