(A*) Pathfinding
本文关键字:Pathfinding | 更新日期: 2023-09-27 18:00:04
(A*)路径查找
仅适用于上、下、左、右
无论如何,我不确定,我已经检查了一些例子,但是,会是这样吗?:
Point StartTile;
Point EndTile;
List<Point> CheckedPoints;
List<Point> UncheckedPoints;
因此,我将把StartTile添加到UncheckedPoints。
我将循环浏览未选中的点,并将(上、下、左、右)平铺添加到不在已选中的点中。删除我刚刚检查的点,并将其添加到CheckedPoints中。
我也会这样做,直到我在UncheckedPoints中到达EndTile,然后呢?
1如果我不能到达EndTile,它会永远循环吗?我该如何防止这种情况发生
2如果我无法到达EndTile,有办法找到离EndTile最近的tile吗
3如何获取从StartTile到EndTile的磁贴列表?为每个周期保留一个长列表会占用大量内存,对吧
1如果我不能到达EndTile,它会永远循环吗?我该如何防止这种情况发生?
不,算法应该只运行,只要有UncheckedPoints。一旦到达EndTile,您可以中止,但这不是必须的。
并且您决不能将已包含在CheckedPoints 中的点添加到UncheckedPoints
2如果我无法到达EndTile,有没有办法找到离EndTile最近的tile?
是的,由于您将所有访问过的ppint存储在CheckedPoints中,因此您可以在其中选择最近的点。
3如何获取从StartTile到EndTile的磁贴列表?为每个周期保留一个长列表会占用大量内存,对吧?
您可以为每个点进行存储,从哪个点开始访问。
这将使所需的内存增加一倍,但不会是"内存负载",因为无论如何,您已经必须存储所有访问的点,以避免在循环中运行。
--
你可能想在网格上(而不是在图上)看看Dijkstra的算法,它更简单。A*只是一种优化,不以一种随机顺序探索所有标题,而是首先探索最接近末尾瓦片的标题。