剑指offer13. 机器人的运动范围
class Solution {
public:
int movingCount(int m, int n, int k) {
if (m<1||n<1||k<0){
return 0;
}
bool *visited = new bool[m*n];
for(int i=0;i<m*n;i++){
visited[i]=false;
}
int count =movingCountCore(m,n,k,visited,0,0);
delete[] visited;
return count;
}
private:
int movingCountCore(int m,int n,int k,bool *visited,int row,int col){
int count =0;
if(movedot(row,col,k)&&col<n&&row<m&&col>=0&&row>=0&&visited[m*col+row]==false){
visited[m*col+row]=true;
count=1+movingCountCore(m,n,k,visited,row,col+1)+movingCountCore(m,n,k,visited,row,col-1)+movingCountCore(m,n,k,visited,row+1,col)+movingCountCore(m,n,k,visited,row-1,col);
}
return count;
}
bool movedot(int row,int col,int k){
int tens=row/10+col/10;
int nums=row%10+col%10;
if (tens+nums<=k){
return true;
}
return false;
}
};