int getDigitSum(int number){ //计算数位之和
int sum = 0;
while(number>0){
sum+=number%10;
number/=10;
}
return sum;
}
bool check(int threshold,int rows,int cols,int row,int col,bool* visited){  //检查是否能进入该方格
if(row>=0&&row<rows&&col<cols&&col>=0&&getDigitSum(row)+getDigitSum(col)<=threshold&&!visited[row*cols+col])
return true;
return false;
}
int movingCountCore(int threshold,int rows,int cols,int row,int col,bool* visited){  //返回可以到达多少个方格
int count = 0;
if(check(threshold,rows,cols,row,col,visited)){
visited[row*cols+col]=true;
count=1+movingCountCore(threshold,rows,cols,row-1,col,visited)
+movingCountCore(threshold,rows,cols,row,col-1,visited)
+ movingCountCore(threshold,rows,cols,row+1,col,visited)
+movingCountCore(threshold,rows,cols,row,col+1,visited);
}
return count;
}
int movingCount(int threshold,int rows,int cols){  //定义bool类型的数组判断是否访问过了
if(threshold<0||rows<=0||cols<=0)
return 0;
bool* visited = new bool[rows*cols];
for(int i=0;i<rows*cols;i++){
visited[i]= false;
}
int count = movingCountCore(threshold,rows,cols,0,0,visited);
delete []visited;
return count;
}