(A *)寻路

时间:2013-02-18 18:06:18

标签: c# .net path-finding

(A *)寻路

仅适用于上,下,左,右

无论如何,我不确定,我已经检查了一些例子,但是,它会是这样的吗?:

Point StartTile;
Point EndTile;
List<Point> CheckedPoints;
List<Point> UncheckedPoints;

所以,我会将 StartTile 添加到 UncheckedPoints

如果不在 CheckedPoints 。并删除我刚检查过的点,并将其添加到 CheckedPoints

UncheckedPoints 中使用 EndTile 之前我会这样做,然后是什么?

1如果我无法访问EndTile,它会永远循环吗?我该如何防止这种情况?

2如果我无法访问EndTile,有没有办法让最近的磁贴到EndTile?

3如何从StartTile到EndTile获取切片列表?为每个周期保留一个长列表会占用大量内存,对吧?

1 个答案:

答案 0 :(得分:1)

  

1如果我无法访问EndTile,它会永远循环吗?我该如何防止这种情况?

不,算法只应运行,只要有UncheckedPoints。一旦达到EndTile,您就可以中止,但这不是必需的。

并且您绝不能向已经包含在CheckedPoints中的UncheckedPoints添加一个点

  

2如果我无法访问EndTile,有没有办法让最近的磁贴到EndTile?

是的,因为您在CheckedPoints中存储了所有访问过的ppints,您可以选择其中最近的点。

  

3如何从StartTile到EndTile获取切片列表?为每个周期保留一个长列表会占用大量内存,对吗?

您可以存储每个点,从那里访问它。

这会使所需的内存翻倍,但它不会是“内存负载”,因为你必须存储所有访问过的点,以避免在循环中运行。

-

您可能希望在网格(而不是图表)上查看Dijkstra的算法,这更简单。 A *只是一种优化,不能以一种随机顺序探索所有标题,而是首先探索最接近结束图块的标题。