我想写一个简单的 1D RTS游戏,并且有以下路径查找问题: 有很多一维线,到处都是传送器,可用于在线路之间移动,但也可以在当前线路内行进。传送器是在线路之间移动的唯一方式。什么算法或伪代码可以用来确定li1行上的位置po1和li2上的po2之间的最短路径?我们有一套传送器T(每个都有一个po和li),它们相互连接,成本为零。
这是因为我认为这些在1D中会有些过分。
...0....s..0 ......0.x...
这里,最短的是从开始s到目标x的方式是
答案 0 :(得分:2)
你可以从任何其他传送器出发吗?在这种情况下,只有两种可能的方式:从起始位置向右和向左。一旦你到达传送器,就去最靠近目的地的传送器。完成。好吧,如果你不知道哪个传送器最接近目的地,你可以在同一架飞机上试用它们,但仍然可以。
答案 1 :(得分:0)
由于向左或向右移动你只能击中另一个传送,你基本上可以考虑将每个传送连接到传送带两侧的左右传送;所以每个传送都连接到其他四个传送。
这只是一个图表,每个节点最多有四个边。所以,只需在内存中构建该图形,并使用Dijkstra算法解决您的问题(这不是过度杀伤,因为我们不再“在”一维“)。这将比@Jakob建议的强力算法快得多。
答案 2 :(得分:0)
我相信你可以通过将起点搜索与终点搜索相结合来改进雅各布的答案。
在第一步中,从起点开始,考虑2个搜索路径。 左边的路径和右边的路径
每次迭代都会在两条路径上迈出一步,直到其中一条路径......
如果(2)在尚未击中传送器的路径上留下标记。
现在从终点x开始,也开始在2条路径上搜索。所以向左和向右,每次迭代一步。 现在又有两种可能的结果:
这将以2n步找到最短路径,其中n是该路径的长度。 (因为你总是向两个方向看。)