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