leetcode-华为专题-980. 不同路径 III

 

 

class Solution {
public:
    //vector<vector<int>> res;
    int res = 0;
    int count_0 = 0;
    int uniquePathsIII(vector<vector<int>>& grid) {
        int m = grid.size();
        int n = grid[0].size();
        vector<vector<bool>> visited(m,vector<bool>(n,false));
        int ii = 0;
        int jj = 0;
        int count = 0;
        for(int i = 0; i < m; i++)
            for(int j =0; j < n; j++){
                if(grid[i][j]==1){ // 记录1的下标
                    ii = i;
                    jj = j;
                }
                if(grid[i][j]==0){  // 统计0的值
                    count_0++;
                }
            }
        dfs(grid, ii, jj, visited, 0);
        return res;
    }

    void dfs(vector<vector<int>>& grid, int i, int j, vector<vector<bool>> visited,int count){
        int m = grid.size();
        int n = grid[0].size();
        if(i<0||i>=m||j<0||j>=n||grid[i][j]==-1||visited[i][j])
            return;
        // 当grid[i][j] == 2时,count的值时0的值加上一个2的值,所以count == count_0+1
        if(grid[i][j] == 2&&count == count_0+1){
            // res.push_back(temp);
            res++;
            return;
        }
        visited[i][j] = true;
        //cout<<" i "<<i<<" j: "<<j<<endl;
        // temp.push_back()
        dfs(grid, i+1, j, visited, count+1);
        dfs(grid, i-1, j, visited, count+1);
        dfs(grid, i, j+1, visited, count+1);
        dfs(grid, i, j-1, visited, count+1);
    }
};

 

posted @ 2021-08-14 18:06  三一一一317  阅读(94)  评论(0)    收藏  举报