嘿,我在下面的代码中遇到了迷宫问题中老鼠的分割错误



如果网格[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) {

您只应在检查了nxny是否在边界内之后才检查visitedmand表达式两边的顺序很重要。

visited[nx][ny] == 0越界。m[nx][ny] == 1也越界了。

最新更新