class Solution { public: int n=0,row=0,col=0;//记录合法数,当前行数、列数 int sum(int row,int col){ int sum_row=row>9?row/10+row%10:row; int sum_col=col>9?col/10+col%10:col; return sum_row+sum_col; } void dfs(int threshold, int rows, int cols, vector<vector<bool>> &visited){ if(visited[row][col] || sum(row,col)>threshold)//出口:不合法或者已访问 return; visited[row][col]=true;n++;//访问当前结点,合法数加一 if(row<rows-1)//向下走 row++;dfs(threshold,rows,cols,visited);//继续判断接下来的结点是否合法 if(row>0)//向上走 row--;dfs(threshold,rows,cols,visited); if(col<cols-1)//向右走 col++;dfs(threshold,rows,cols,visited); if(col>0)//向左走 col--;dfs(threshold,rows,cols,visited); } int movingCount(int threshold, int rows, int cols) { vector<vector<bool>> visited(rows,vector<bool>(cols)); dfs(threshold,rows,cols,visited); return n; } };