c++代码没有给出输出(主题:递归和2D矢量)


  1. 您会得到一个数字n,表示行数
  2. 您会得到一个数字m,表示列的数量
  3. 给定n*m个数字,表示2d数组a的元素。这些数字只能是1或0
  4. 你站在左上角,必须到达右下角。只允许四次移动"t"(向上一步(、"l"(向左一步(和"d"(向下一步("r"(向右一步(。只能移动到其中包含0值的单元格。不能移出边界或移动到值为1的单元格中(1表示障碍(
  5. 在不更改签名的情况下,完成floodfill函数的主体,以打印可用于从左上角到右下角移动的所有路径

这是问题所在,这里有参考链接https://www.pepcoding.com/resources/online-java-foundation/recursion-backtracking/flood-fill-official/ojquestion#

我使用了下面的代码,并检查了很多次。我没有发现任何错误。请帮我找出问题所在,我正在用c++编码


#include <iostream>
#include <string>
#include <vector>
using namespace std;
void floodfill(vector<vector<int>> maze, int sr, int sc, string psf, vector<vector<int>> visited)
{
if (sr < 0 || sc < 0 || sr == maze.size() || sc == maze[0].size() ||
maze[sr][sc] == 1 || visited[sr][sc] == 1)
return;
if (sr == maze.size() - 1 && sc == maze[0].size() - 1)
{
cout << psf << endl;
return;
}
visited[sr][sc] == 1;
floodfill(maze, sr - 1, sc, psf + "t", visited);
floodfill(maze, sr, sc - 1, psf + "l", visited);
floodfill(maze, sr + 1, sc, psf + "d", visited);
floodfill(maze, sr, sc + 1, psf + "r", visited);
visited[sr][sc] == 0;
}
int main()
{
int n, m;
cin >> n >> m;
vector<vector<int>> arr(n, vector<int>(m));
vector<vector<int>> visited(n, vector<int>(m));
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> arr[i][j];
floodfill(arr, 0, 0, "", visited);
}

请有人帮我。。

您需要添加对向量的引用。C和C++是传递值语言,您需要明确地告诉C++您是通过引用传递的。

void floodfill(vector<vector<int>>& maze, int sr, int sc, string psf, vector<vector<int>>& visited)
{
if (sr < 0 || sc < 0 || sr == maze.size() || sc == maze[0].size() ||
maze[sr][sc] == 1 || visited[sr][sc] == 1)
return;
if (sr == maze.size() - 1 && sc == maze[0].size() - 1)
{
cout << psf << endl;
return;
}
visited[sr][sc] = 1;
floodfill(maze, sr - 1, sc, psf + "t", visited);
floodfill(maze, sr, sc - 1, psf + "l", visited);
floodfill(maze, sr + 1, sc, psf + "d", visited);
floodfill(maze, sr, sc + 1, psf + "r", visited);
visited[sr][sc] = 0;
}

另外,我想你可能想在这里做作业visited[sr][sc] == 1;

最新更新