使用'传送器'进行1D路径搜索

时间:2010-09-01 19:05:20

标签: algorithm path-finding

问题

我想写一个简单的 1D RTS游戏,并且有以下路径查找问题: 有很多一维线,到处都是传送器,可用于在线路之间移动,但也可以在当前线路内行进。传送器是在线路之间移动的唯一方式。什么算法或伪代码可以用来确定li1行上的位置po1和li2上的po2之间的最短路径?我们有一套传送器T(每个都有一个po和li),它们相互连接,成本为零。

为什么不使用A *或Dijkstra算法

这是因为我认为这些在1D中会有些过分。

澄清

  • 这可能听起来有点二维,但并不是因为你只能在一条线上左右移动。
  • 前往远程传送器需要付费,但从一个传送到另一个传送器是免费的。 见ascii art:
    ...0....s..0
    ......0.x...

这里,最短的是从开始s到目标x的方式是

  • 转到右侧的传送器
  • 传送一行(仅在此图中;真正的飞机无序)
  • 然后右转到目标(最终费用= 5)

3 个答案:

答案 0 :(得分:2)

你可以从任何其他传送器出发吗?在这种情况下,只有两种可能的方式:从起始位置向右和向左。一旦你到达传送器,就去最靠近目的地的传送器。完成。好吧,如果你不知道哪个传送器最接近目的地,你可以在同一架飞机上试用它们,但仍然可以。

答案 1 :(得分:0)

由于向左或向右移动你只能击中另一个传送,你基本上可以考虑将每个传送连接到传送带两侧的左右传送;所以每个传送都连接到其他四个传送。

这只是一个图表,每个节点最多有四个边。所以,只需在内存中构建该图形,并使用Dijkstra算法解决您的问题(这不是过度杀伤,因为我们不再“在”一维“)。这将比@Jakob建议的强力算法快得多。

答案 2 :(得分:0)

我相信你可以通过将起点搜索与终点搜索相结合来改进雅各布的答案。

在第一步中,从起点开始,考虑2个搜索路径。 左边的路径和右边的路径

每次迭代都会在两条路径上迈出一步,直到其中一条路径......

  1. ...你点击x(搜索结束,这是最短的路径)
  2. ......你打了一个传送器
  3. 如果(2)在尚未击中传送器的路径上留下标记。

    现在从终点x开始,也开始在2条路径上搜索。所以向左和向右,每次迭代一步。 现在又有两种可能的结果:

    1. 你击中了标记点 - >最短路径从标记方向开始到达没有传送器的结束。
    2. 你击中了一个传送器 - >你的最短路径从步骤(2)中的开始到传送器,然后从步骤(4)中的传送器到结束x。
    3. 这将以2n步找到最短路径,其中n是该路径的长度。 (因为你总是向两个方向看。)