如果网格[i][j]==0路径阻塞的大鼠在0,0中,则给出迷宫中的标准大鼠问题的二进制网格。找到所有方法到达n-1,n-1细胞。我想我已经把所有的限制都放进去了。
class Solution{
public:
// vector<string>ans;
// vector<pair<int,int>>dir={{0,1},{0,-1},{-1,0},{1,0}};
// vector<string>move={"R","L","U","D"};
void dfs(int i,int j,vector<vector<int>>&m,string
curr,vector<vector<int>>&visited,vector<pair<int,int>>dir,vector<string>move,vector<string>&ans){
if(i==m.size()-1 and j==m.size()-1){
ans.push_back(curr);
return;
}
for(int z=0;z<dir.size();z++ ){
int nx=i+dir[z].first;
int ny=j+dir[z].second;
if(visited[nx][ny]==0 and m[nx][ny]==1 and nx>=0 and nx<m.size() and ny>=0 and
ny<m.size() ){
visited[nx][ny]=1;
dfs(nx,ny,m,curr+move[z],visited,dir,move,ans);
visited[nx][ny]=0;
}
}
}
vector<string> findPath(vector<vector<int>> &m, int n) {
vector<vector<int>>visited(m.size(),vector<int>(n,0));
string curr="";
vector<string>ans;
vector<pair<int,int>>dir={{0,1},{0,-1},{-1,0},{1,0}};
vector<string>move={"R","L","U","D"};
dfs(0,0,m,curr,visited,dir,move,ans);
return ans;
}
};
更改
if (visited[nx][ny]==0 and m[nx][ny]==1 and
nx>=0 and nx<m.size() and ny>=0 and ny<m.size()) {
至
if (nx>=0 and nx<m.size() and ny>=0 and ny<m.size() and
visited[nx][ny]==0 and m[nx][ny]==1) {
您只应在检查了nx
和ny
是否在边界内之后才检查visited
和m
。and
表达式两边的顺序很重要。
visited[nx][ny] == 0
越界。m[nx][ny] == 1
也越界了。