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