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