当前位置: 首页 > 知识库问答 >
问题:

C++代码不给出输出(主题:递归和二维向量)

苏野
2023-03-14
  1. 您将得到一个数字n,表示行数。
  2. 您将得到一个数字m,表示列数。
  3. 给出了N*M个数字,表示2D数组A的元素。数字只能是1或0。
  4. 你站在左上角,必须到达右下角。只允许四个动作:'t'(1步向上),'l'(1步向左),'d'(1步向下),'r'(1步向右).只能移动到其中值为0的单元格。您不能移出边界或在其中值为1的单元格中(1表示障碍)
  5. 完成floodfill函数的主体--不更改签名--以打印可用于从左上角移动到右下角的所有路径。

这就是问题所在,这里是参考链接https://www.pepcoding.com/resources/online-Java-基金会/递归-回溯/洪水-填充-官方/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);
}

请有人来帮帮Thnx..

共有1个答案

楚良平
2023-03-14

您需要添加对向量的引用。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;
}

此外,我认为您可能希望在这里执行assignmnet访问[sr][sc]==1;

 类似资料:
  • 问题内容: 使用Oracle 11g第2版,以下查询给出ORA-01790:表达式必须具有与相应表达式相同的数据类型: 该错误表明UNION ALL的两个子查询的数据类型返回不同的数据类型。 即使我在每个子查询中都将其转换为TIMESTAMP,也将收到相同的错误。 我想念什么? 编辑: 我不是在寻找CONNECT BY替换。 问题答案: 我认为,对于带有日期或时间戳列的查询,“递归子查询分解”在1

  • 使用以下代码: 为什么这个输出: 而不是我所期望的,那就是: 我讨厌递归。我讨厌递归。我讨厌递归。谢谢

  • 我正在尝试使用Leetcode中的递归来解决路径和问题。我不擅长用递归解决问题。我看到了一些其他的解决方案,但我试图自己实现一个。我不明白我在我的方法中做错了什么。如果有人帮助我理解我做错了什么,我将非常感谢你的帮助。提前谢谢。 问题陈述:给定二叉树的根和整数targetSum,如果树有根到叶的路径,则返回true,这样沿路径的所有值相加等于targetSum。 叶是没有子节点的节点。 我的方法:

  • 为什么我在输出中得到一个额外的1*1,这有点倒退?有点像递归初学者,希望得到详细的答案。 输出

  • 问题内容: 哦,我的话我是个傻瓜。 调用函数时,我只是省略了第二个和第三个参数。像个傻瓜。因为那就是我。原来愚蠢的问题如下: 这似乎是它必须做一个很平常的事,但是我无法找到相关的教程,我太无知了约,并弄明白自己。 我的文件中有一个C函数。 (您可能会猜到,我最初的参数为double 而不是void ,但无法弄清楚在Python方面该怎么做。我当然很想将其改回来,但我并不挑剔只要有效。) 我用它制作

  • 所需输出: 我如何使用递归来完成这件事呢?我的代码思想是: 我对在if语句和system.out.println()中返回什么感到困惑,因为数字5不会随着它的停留而减少/增加例如,它将垂直停留5,我该如何处理这个问题呢?我的代码更多的是一个说明,只是为了证明我在做这件事。