我目前正在使用 A* 寻路算法来计算无限网格上的路径(使用 Gridworld 中的 UnboundedGrid,AP CS 案例研究,如果对任何人有帮助的话)。一切都很好,除了因为末端节点完全被墙包围而没有有效路径的情况。正如预期的那样,算法继续无限搜索,永远找不到结束节点。
一个可能的解决方案是在整个寻路区域周围放置不可见的(如用户看不到但算法看到的)墙,确保开始节点、结束节点和所有墙节点都在这些范围内墙壁,有2-3个空格填充左右。就像是:
_________________________________
| |
| S | |
| _____| _____ |
| | E | |
| |___| |
|_______________________________|
...想法是最终所有节点都将添加到封闭列表中,开放列表将变为空,此时我将知道不存在有效路径。
这似乎是解决问题的合理方法吗?有什么方法可能会出错吗?我知道另一种解决方案是同时从末端向后寻路,但这似乎可能很昂贵,特别是在末端节点没有那么紧密封闭的情况下。