我收到此代码的运行时错误,我不知道为什么。 我正在创建一个网格,然后在其上运行 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/