c++ - 简单 C++ 代码上的运行时错误信号 11

标签 c++ arrays runtime-error breadth-first-search

我收到此代码的运行时错误,我不知道为什么。 我正在创建一个网格,然后在其上运行 BFS。这里的目标是读取网格的行和列,然后确定在到达终点之前可以通过的最大星星数。 起点是左上角,终点是右下角。 你只能向下和向右移动。有什么想法吗?

#include <iostream>
#include <queue>
using namespace std;

int main() {
    int r, c, stars[1001][1001], grid[1001][1001], ns[1001][1001];
    pair<int, int> cr, nx;
    char tmp;
    queue<pair<int, int> > q;
    cin >> r >> c;

    for(int i = 0; i < r; i++) {
        for(int j = 0; j < c; j++) {
            cin >> tmp;

            if(tmp == '.') {
                grid[i][j] = 1000000000;
                ns[i][j] = 0;
                stars[i][j] = 0;
            }
            else if(tmp == '*') {
                grid[i][j] = 1000000000;
                ns[i][j] = 1;
                stars[i][j] = 1;
            }
            else
                grid[i][j] = -1;
        }
    }

    grid[0][0] = 0;
    cr.first = 0;
    cr.second = 0;
    q.push(cr);

    while(!q.empty()) {
        cr = q.front();
        q.pop();

        if(cr.first < r - 1 && grid[cr.first + 1][cr.second] != -1 && ns[cr.first][cr.second] + stars[cr.first + 1][cr.second] > ns[cr.first + 1][cr.second]) {
            nx.first = cr.first + 1; nx.second = cr.second;

            grid[nx.first][nx.second] = grid[cr.first][cr.second] + 1;
            ns[nx.first][nx.second] = ns[cr.first][cr.second] + stars[cr.first + 1][cr.second];
            q.push(nx);
        }

        if(cr.second < c - 1 && grid[cr.first][cr.second + 1] != -1 && ns[cr.first][cr.second] + stars[cr.first][cr.second + 1] > ns[cr.first][cr.second + 1]) {
            nx.first = cr.first; nx.second = cr.second + 1;

            grid[nx.first][nx.second] = grid[cr.first][cr.second] + 1;
            ns[nx.first][nx.second] = ns[cr.first][cr.second] + stars[cr.first][cr.second + 1];
            q.push(nx);
        }
    }

    if(grid[r - 1][c - 1] == 1000000000)
        cout << "Impossible" << endl;
    else
        cout << ns[r - 1][c - 1] << endl;
}

示例输入:

6 7
.#*..#.
..*#...
#.....#
..###..
..##..*
*#.....

最佳答案

我猜你的堆栈不够大

int stars[1001][1001], grid[1001][1001], ns[1001][1001];

这是 3 * 1001 * 1001 * sizeof(int) 字节。如果 int 的大小为 4 个字节,则约为 12MB。

要么使用编译器选项增加堆栈大小,要么使用动态分配,即 std::vector

关于c++ - 简单 C++ 代码上的运行时错误信号 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065371/

相关文章:

javascript - 如何基于数组播放和停止动画?

c++ - 2个类之间的双向关联

c++ - 通过隐式转换返回时是否需要复制构造函数?

c++ - C/C++ : Calling function with no arguments with function which returns nothing

c - C 编程的指针和数组(基础)

ios - 获取 Error Domain=NSCocoaErrorDomain Code=261 简单案例

c++ - operator++()和有什么不一样?调用和++(* this)?

java - 字符串数组长度显示为 1,即使调用逗号 (,) 分隔后数组为空

java - 为什么原始数组字段会打印出空指针异常?

c++ - 为什么会出现段错误(数组作为类的元素)?