D7Q1深度优先算法

题目来源:b站蓝桥杯Python省赛集训p3

题目:给一个矩阵

        1,1,3

        2,3,4

        1,0,1

        求矩阵最长递减路径

思路

        使用递归函数dfs(x,y,v),x是横坐标,y是纵坐标,v是上一个点的值。在函数中,先判断是否出界或值比上一个值小,若是,则直接返回0。然后比较每个点的上下左右四个点哪边的递减路径长,路径初始长度l=1,以向右为例:若之前已经比过别的方向,那么已有路径长度l,比较l和向右的路径长度1+dfs (x+1 , y , list[x][y]),将这个点的最大递减长度设置为两者最大值,即:

        l=max(l,1+dfs (x+1 , y , list[x][y]))

        最后返回X,y点的最大长度l

代码:       

        

list=[[1,1,3],[2,3,4],[1,0,1]]
n=3#hang
m=3#lie
def dfs(x,y,v):
    if x<0 or x==m or y<0 or y==n: #越界
        return 0
    if list[x][y]>=v: #增大返回0
        return 0
    l=1
    l=max(1+dfs(x-1,y,list[x][y]),l)
    l =max(1+dfs(x+1,y,list[x][y]),l)
    l =max(1+dfs(x,y-1,list[x][y]),l)
    l =max(1+dfs(x,y+1,list[x][y]),l)
    return l

ans=1
for i in range(n):
    for j in range(m):
        ans=max(ans,dfs(i,j,100))
print(ans)

优化:递归函数有很多重复计算,可使用记忆数组记录x,y点的最大递减长度,之后递归到x,y点即可直接调用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值