【问题标题】:Anyone can tell me why it is giving runtime error任何人都可以告诉我为什么会出现运行时错误
【发布时间】:2022-12-20 04:20:21
【问题描述】:

问题链接:LeetCode,我收到运行时错误,但未找到问题所在。为什么它会给出运行时错误任何人都可以向我解释一下吗?

class Solution {
public:
    bool dfs(vector<vector<int>>& grid, int row, int col, int color)
    {
        if(row<0 || col<0 || row>=grid.size() || col>=grid[0].size() || abs(grid[row][col])!=color)
            return false;
        grid[row][col]=-color;
        bool first = dfs(grid, row-1, col, color);
        bool second = dfs(grid, row, col+1, color);
        bool third = dfs(grid, row+1, col, color);
        bool fourth = dfs(grid, row, col-1, color);
        if(first && second && third && fourth)
        {
            grid[row][col]=color;
        }
        return true;
    }
    vector<vector<int>> colorBorder(vector<vector<int>>& grid, int row, int col, int color) {
        
        dfs(grid, row, col, grid[row][col]);
        for(int i=0; i<grid.size(); i++)
        {
            for(int j=0; j<grid[0].size(); j++)
            {
                if(grid[i][j]<0)
                    grid[i][j]=color;
            }
        }
        return grid;    
    }
};

【问题讨论】:

  • 是时候学习一些此类网站不会教您的东西了:首先,如何debug您的程序,以及如何使用debugger。创建一个带有硬编码输入的minimal reproducible example,在本地构建和调试。
  • colorBorder中:j&lt;grid[0].size()不应该是j&lt;grid[i].size()吗?
  • 请在您的问题中也包括错误。
  • dfs(0, 0) 将调用dfs(0, 1),后者将调用dfs(0, 0)dfs(0, 1)将调用dfs(0, 0),...它永远不会结束。
  • @molbdnilo 我明白你的意思了,谢谢你的解释

标签: c++ recursion graph depth-first-search


【解决方案1】:

我已经为您的代码编写了测试:https://godbolt.org/z/TazozK8xe 并启用了地址清理器。

无需阅读您的代码,只需阅读消毒剂日志,您就可以看到您有不定式递归(注意堆栈帧的数量超过 178,当问题很简单时最多 4 步即可完成)。基本上你停止递归的条件是错误的或不完整的。

我建议你学习如何使用调试器,这样你就可以更容易地理解这个问题。

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 2022-07-07
    • 2023-02-08
    • 2021-05-14
    • 2020-09-11
    • 2014-05-29
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多