gpt4 book ai didi

java - 明星算法,异常行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:31:58 25 4
gpt4 key购买 nike

我正在为大学计算机游戏项目编写 A 星算法。老实说,我担心一旦我提到大学,我就会有任何响应者向西走,我也承认我正在使用的二维节点数组的大小非常大,宽度 = 800 &高度 = 800我已经设法让它发挥最好的作用。但是我遇到了一个有趣的错误

if (!diagonalMovementAllowed) {
if ((x != 0) && (y != 0)) {
continue;
}
}

没有下面的代码,我可以从任何坐标找到目标,只要它在二维数组的范围内,但是如果我使用上面的代码,算法似乎无法达到目标,如果起点或目标距离相当远,例如

如果目标 x = 700 & y = 700如果开始 x = 0 & y = 700,没问题

但是如果目标 x = 700 & 目标 y = 700如果开始 x = 690 & y = 720好像找不到路径

我的问题是arrayList(open 或 closedList)是否可以达到一个根本无法找到目标的点,并且已经达到一个非常高的大小以至于它只是退出并且有没有办法识别导致这种情况的原因,而无需遍历每个 x 和 y 坐标使用调试器?

我确实觉得这是一个相当模糊的问题,但我希望我能得到一个笼统的答案,因为我觉得没有多少人会太倾向于让我完成整个解释,尤其是因为我确实提到了这是一个项目,我的讲师似乎知道任何事情。我希望我能得到一些建议和答案,并提前致谢。

编辑:回答以下2个问题(感谢您的快速回复)

for(int x = -1; x < 2; x++){
for(int y = -1; y < 2; y++){


if (!diagonalMovementAllowed) {
if ((x != 0) && (y != 0)) {
continue;
}
}
int neighborX = x + current.x;
int neighborY = y + current.y;
}
}

上面的代码是其中的一部分,我显然不想将其全部发布,因为我的讲师可能会因为我获得太多帮助而开枪(或失败)但要解释上面的内容是做什么的

当 openList 不为空时,遍历 x 和 y 的邻居x = x -1 或 x = x +1y = y -1 或 y = y +1

0,0 0,1 0,21,0 1,1 1,22,0 2,1 2,2如果你在 1,1(开始)并且如果你不想对角线移动那么应该允许以下(0,0)(2,0)(2,2)或(0,2)这是通过阻止 x 和 y 不等于 0例如

neighborX = x + current.x
1 = 0 + 1
neighborY = y + current.y
2 1 + 1
(1,2)

neighborX = x + current.x
1 = 0 + 1
neighborY = y + current.y
0 -1 + 1
(1,0)

neighborX = x + current.x
2 = 1 + 1
neighborY = y + current.y
0 -1 + 1
(2,0)

neighborX = x + current.x
0 = -1 + 1
neighborY = y + current.y
0 -1 + 1
(0,0)

最佳答案

我假设您的代码片段是后继生成逻辑的一部分。不幸的是,我认为逻辑不对:

if (!diagonalMovementAllowed) {
if ((x != 0) && (y != 0)) {
continue;
}
}

当不允许对角线移动时,这将防止从内部位置(不在 x==0 列或 y==0 行中的位置)生成任何后继者。

如果我对您的代码的假设是正确的,这就是为什么当起始位置类似于 x = 690 & y = 720 时找不到解决方案的原因——起始位置没有后继者!

关于java - 明星算法,异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com