本文实例为大家分享了python机器人行走步数问题,供大家参考,具体内容如下
# !/usr/bin/env python3 # - * -编码:utf - 8 - * #文件名:robot_path.py #作者:zoujiameng@aliyun.com.cn 地号上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 #例如,当k为18时,机器人能够进入方格(35岁,37),因为3 + 5 + 3 + 7=18。但是,它不能进入方格(35岁,38),因为3 + 5 + 3 + 8=19。请问该机器人能够达到多少个格子吗? 类机器人: #共用接口,判断是否超过K def getDigitSum(自我,num): sumD=0 而(num> 0): 全国矿工工会sumD +=% 10 num/=10 返回int (sumD) def PD_K(自我、行关口,K): sumK=self.getDigitSum(行)+ self.getDigitSum(峡路) 如果sumK比;凯西: 返回假 其他: 还真 def PD_K1(自我,i, j, k): “确定该位置是否可以走,将复杂约束条件设定” 指数=地图(str (i, j)) sum_ij=0 x在指数: 在x y: sum_ij +=int (y) 如果sum_ij & lt;=k: 还真 其他: 返回假 #共用接口,打印遍历的访问二维列表 def printMatrix(自我、矩阵、r、c): 打印(“坏蛋位置(“r”、“, c”)”) x在矩阵: 在x y: 打印(y,结束=') print () #回溯法 def hasPath(自我、阈值、行峡路): 访问=[[0 j的范围(关口)]我的范围(行)] 数=0 startx=0 starty=0 #打印(阈值、行关口,访问) 访问=自我。findPath(阈值、行关口,参观、startx starty, 1, 1) x访问: 在x y: 如果(y==1): 数+=1 打印(访问) 返回数 def findPath(自我、阈值、行关口,访问,curx,卷曲,大学校长,猎物): 如果0 & lt;=curx & lt;行和0 & lt;=卷曲& lt;关口和自我。PD_K1 (curx、卷曲、阈值)和访问[curx][卷曲]!=1:#判断当前点是否满足条件 访问[curx][卷曲)=1 自我。printMatrix(访问curx卷曲) 大学校长=curx 猎物=卷曲 如果卷曲+ 1 & lt;关口和自我。PD_K1 (curx,卷曲+ 1,阈值)和访问[curx][卷曲+ 1]!=1:#东方 访问[curx][卷曲+ 1)=1 回归自我。findPath(阈值、行关口,访问,curx,卷曲+ 1,大学校长,猎物) elif cury-1祝辞=0和自我。PD_K1 (curx cury-1阈值)和访问[curx] [cury-1] !=1: #西方 访问[curx] [cury-1]=1 回归自我。findPath(阈值、行关口,参观、curx cury-1,大学校长,猎物) elif curx + 1 & lt;行和自我。PD_K1 (curx + 1、卷曲、阈值)和访问[curx + 1][卷曲]!=1:#一幕 访问[curx + 1][卷曲)=1 回归自我。findPath(阈值、行关口,访问,curx + 1,卷曲,大学校长,猎物) elif 0 & lt;=curx-1和自我。PD_K1 (curx-1、卷曲、阈值)和访问[curx-1][卷曲]!=1:#北 访问[curx-1][卷曲)=1 回归自我。findPath(阈值、行关口,访问,curx-1,卷曲,大学校长,猎物) 其他:#返回上一层,此处有问题 返回访问#自我。findPath(阈值、行关口,访问,curx,卷曲,大学校长,猎物) #回溯法2 def movingCount(自我、阈值、行峡路): 访问=[[0 j的范围(关口)]我的范围(行)] 打印(访问) 数=自我。movingCountCore(阈值、行关口,0,0,访问); 打印(访问) 返回数 def movingCountCore(自我、阈值、行关口,行,坳,访问): cc=0 如果(自我。检查(阈值、行关口、行坳,访问)): 参观【行】(col)=1 cc=1 +自我。movingCountCore(阈值、行关口,行+ 1,坳,访问)+自我。movingCountCore(阈值、行关口、行坳+ 1,访问)+自我。movingCountCore(阈值、行关口,第1行,坳,访问)+自我。movingCountCore(阈值、行关口、行col-1,访问) 返回cc def检查(自我、阈值、行关口,行,坳,访问): 如果(0 & lt;=行& lt;行和0 & lt;=坳& lt;关口和(self.getDigitSum(行)+ self.getDigitSum (col)) & lt;=阈值和访问(行)(col) !=1): 返回True; 返回假 #暴力法,直接用当前坐标和K比较 def力(自我、行关口,k): 数=0 因为我在范围内(行): j的范围(峡路): 如果自我。PD_K (i, j, k): 数+=1 返回数 2 #暴力法,用递归法来做 def块(自我、r、c k): s=总和(map (int, str (r) + str (c))) 返回s> k def con_visited(自我、行峡路): 访问=[[0 j的范围(关口)]我的范围(行)] 返回去 def traval(自我、r、c、行关口,k,访问): 如果不是(0 & lt;=rpython机器人行走步数问题的解决