我正在尝试为我的炸弹人类型游戏实现广度优先搜索算法,其中墙由1表示,楼层由0表示。我希望函数FindDepth给出从位置A到位置B的最短距离,考虑到我们不能重叠墙壁。问题是我在下面的程序中遇到了分段错误。
int FindDepth(int grid[5][5], Position A, Position B)
{
if ((A.x == B.x) && (A.y == B.y)) return 0;
int dist[] = {0,0,0,0};
if(A.x - 1 > -1)
if(grid[A.y][A.x - 1] == FLOOR) {
dist[0] = FindDepth(grid, {A.x-1,A.y}, B);
}
if(A.x + 1 < 6)
if(grid[A.y][A.x + 1] == FLOOR) {
dist[1] = FindDepth(grid, {A.x+1,A.y}, B);
}
if(A.y - 1 > -1)
if(grid[A.y - 1][A.x] == FLOOR) {
dist[2] = FindDepth(grid, {A.x,A.y - 1}, B);
}
if(A.y + 1 < 6)
if(grid[A.y + 1][A.x] == FLOOR) {
dist[3] = FindDepth(grid, {A.x,A.y + 1}, B);
}
int largest = -1;
for(int i = 0; i < 4; i++) {
if(dist[i] > largest) {
largest = dist[i];
}
}
return largest;
}
这是完整的代码。
答案 0 :(得分:5)
问题可能在于这一行:
if(A.x + 1 < 6)
您正在检查A.x + 1 <6。如果是5怎么办? grid是一个包含5个元素的数组,这意味着它的索引是0到4.如果A.x + 1是5,那么你将步入数组的已分配内存之外。
希望这有帮助。
答案 1 :(得分:4)
A.x + 1 < 6
应为A.x + 1 < 5
。同样适用于A.y + 1
。