机器人的运动范围(python实现)

题目描述:

地上有一个 m 行和 n 列的方格。一个机器人从坐标 (0, 0) 的格子开始移动,每一次只能向左右上下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 k 的格子。

例如,当 k 为 18 时,机器人能够进入方格 (35,37),因为 3+5+3+7=18。但是,它不能进入方格 (35,38),因为 3+5+3+8=19。请问该机器人能够达到多少个格子?

解题思路:

回溯法。判断当前的格子是否满足坐标条件并且没有访问过,如果满足,计数加1,并在当前格子下继续判断上下左右四个格子是否满足条件。

def moving(m,n,i,j,threshold):
    global vector
    global sum
    if i>=0 and i<m and j>=0 and j<n and getsum(i)+getsum(j)<threshold and vector[i*n+j]==0 :
        sum +=1
        vector[i*n+j]=1
        moving(m,n,i-1,j,threshold)
        moving(m,n,i+1,j,threshold)
        moving(m,n,i,j-1,threshold)
        moving(m,n,i,j+1,threshold)
    return sum

def getsum(n):
    sum = 0
    while n>0:
        sum=sum+n%10
        n=n/10
    return sum

m = 50
n = 50
threshold = 18
vector = [0 for index in range(m*n)]
sum = 0
num = moving(m,n,0,0,threshold)
print(num)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值