python机器人行走步数问题的解决
本文实例为大家分享了python机器人行走步数问题,供大家参考,具体内容如下
#!/usr/bin/envpython3 #-*-coding:utf-8-*- #fileName:robot_path.py #author: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。请问该机器人能够达到多少个格子? classRobot: #共用接口,判断是否超过K defgetDigitSum(self,num): sumD=0 while(num>0): sumD+=num%10 num/=10 returnint(sumD) defPD_K(self,rows,cols,K): sumK=self.getDigitSum(rows)+self.getDigitSum(cols) ifsumK>K: returnFalse else: returnTrue defPD_K1(self,i,j,k): "确定该位置是否可以走,将复杂约束条件设定" index=map(str,[i,j]) sum_ij=0 forxinindex: foryinx: sum_ij+=int(y) ifsum_ij<=k: returnTrue else: returnFalse #共用接口,打印遍历的visited二维list defprintMatrix(self,matrix,r,c): print("curlocation(",r,",",c,")") forxinmatrix: foryinx: print(y,end='') print() #回溯法 defhasPath(self,threshold,rows,cols): visited=[[0forjinrange(cols)]foriinrange(rows)] count=0 startx=0 starty=0 #print(threshold,rows,cols,visited) visited=self.findPath(threshold,rows,cols,visited,startx,starty,-1,-1) forxinvisited: foryinx: if(y==1): count+=1 print(visited) returncount deffindPath(self,threshold,rows,cols,visited,curx,cury,prex,prey): if0<=curx=0andself.PD_K1(curx,cury-1,threshold)andvisited[curx][cury-1]!=1:#west visited[curx][cury-1]=1 returnself.findPath(threshold,rows,cols,visited,curx,cury-1,prex,prey) elifcurx+1 k defcon_visited(self,rows,cols): visited=[[0forjinrange(cols)]foriinrange(rows)] returnvisited deftraval(self,r,c,rows,cols,k,visited): ifnot(0<=r 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。