列车寻路算法

时间:2013-10-01 07:09:21

标签: algorithm path-finding a-star flood-fill

我正在尝试在火车游戏中寻找寻路解决方案,其中存在不同类型的分叉。我希望火车从一个铁路到另一个铁路,除了寻路之外,一切都已实施。

我需要获得铁路列表,以便火车可以跟随。现在,问题是如何获得列表。

  • 我尝试了A *,因为它停止搜索节点(轨道)是否已经访问过,所以没有用。这是一个问题,因为可能达到某一点的方法是通过最长的路线。
  • 尝试了洪水填充,这次使它不停止搜索是否已经访问过,问题是我如何重建路径以及如何选择它不能再次倒退。

事情是,有些情况下列车必须多次通过铁路才能到达目的地。

有什么想法吗?

起点是A,结束B.当你看到绿色路径是应该行进的方式。黑色圆圈是火车将不止一次步进的铁轨,在这种情况下是2次。

A->B

enter image description here

显然,你需要来自2个黑色才能达到3个红色。你不能只去1black-> 2red-> 1red-> 3red。

2 个答案:

答案 0 :(得分:6)

看这张照片

junctions

directed graph似乎可以很好地表示您的问题。在图表中给出每个站点和每个交叉点两个节点,每个节点对应列车的每个方向。 Dijkstra's algorithm完全适用于有向图,所以一旦你遇到问题,其余的就很容易了。

例如,在上图中,从A开始,我们转移到junction 1。从那里开始,只有一个地方可以搬到junction 2,所以A还有一个箭头 - > junction 1和来自junction 1的箭头 - > junction 2。无论你做出哪个选择,你最终都会在junction 1,但是向另一个方向移动,所以我们从那里创建一个单独的节点。从那里,您可以选择转到AB

graph

请注意,我删除了其中一个J1,因为它是多余的(只有一个地方可以去)

如果列车可以停靠并在A等站点转弯,我们可以通过两个方向的边连接这两个节点,或者只将它们组合成一个节点。

您可以指定边距权重以指定距离。

答案 1 :(得分:0)

洪水填充应该真的做到了(我在类似的情况下使用它) - 但你只需要仔细使用开关和段。

应允许算法以不同的方向传递相同的段,但不能相同。即每个部分确实应该被视为两个独立的部分。

要重建您应该为分段注入数字的路径,以便从N-1到达的每个分段都标有N - 然后向后移动时,应该跟踪分段,以便数字稳定减少一个。

这真是一种BFS。