簡體   English   中英

簡單C ++代碼上的運行時錯誤信號11

[英]Runtime Error signal 11 on simple C++ code

我收到此代碼的運行時錯誤,我也不知道為什么。 我正在創建一個網格,然后在其上運行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

為了避免大堆棧,您應該在堆上分配

由於您似乎有三個平行的2維數組,因此可以創建包含ax,y位置的所有三個值的結構。 這樣可以更容易維護:


struct Area 
{ 
  int grid; 
  int ns; 
  int stars; 
}; 
std::vector<std::array<Area,1001>> dim2(1001);
dim2[x][y].grid = 100001;
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM