遇到迷宫问题:
考虑将老鼠放置在 n 顺序的正方形矩阵m [] [] 中的(0,0)处,并且必须到达目的地(n-1,n-1)。您的任务是完成函数 printPath(),该函数返回一个排序的字符串数组,该数组表示大鼠可以到达(n-1,n-1)的目的地的所有可能方向。 )。老鼠可以移动的方向是“ U”(上),“ D”(下),“ L”(左),“ R”(右)。
示例:
1 0 0 0
1 1 0 1
1 1 0 0
0 1 1 1
输出:
DDRDRR DRDDRR
我想出了以下代码:
vector<string> printPath(int m[MAX][MAX], int n){
vector<string> ans;
if(m[0][0]==0)
return ans;
queue<pair <pair<int,int>, string > >q;
q.push({{0,0},""});
m[0][0] = 0;
int X[] = {0,1,0,-1};
int Y[] = {1,0,-1,0};
string t= "";
while(!q.empty()){
pair<pair<int,int>,string> front = q.front();
q.pop();
if(front.first.first == n-1 && front.first.second == n-1){
ans.push_back(front.second);
}
for(int i=0; i<4; i++){
int newx = front.first.first + X[i];
int newy = front.first.second + Y[i];
if(newx>=0 && newy>=0 && newx<n && newy<n && m[newx][newy]==1){
if(i==0)
q.push({{newx,newy},front.second + "R"});
else if(i==1)
q.push({{newx,newy},front.second + "D"});
else if(i==2)
q.push({{newx,newy},front.second + "L"});
else if(i==3)
q.push({{newx,newy},front.second + "U"});
m[newx][newy] = 0;
}
}
}
sort(ans.begin(), ans.end());
return ans;
}
问题在于,它仅打印许多可能的有效路径中的一个有效路径。我在某处读到,使用DFS可以完成的所有事情都可以使用BFS完成。
要打印所有可能的路径,我可以将 n x n 矩阵的副本放入队列中。因为当我们在同一问题上执行DFS时,会将 n x n 矩阵的副本传递给每个递归调用,对吗?
那么问题是哪种方法在内存需求方面更好?