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;
}git