Algorithm 使用'进行一维路径查找;传送机'; 问题
我想写一个简单的1D RTS游戏,有以下路径查找问题: 有许多一维线,到处都是传送带,它们可以在线之间传送,也可以在当前线内传送。传送机是在线路之间传送的唯一方式。什么算法或伪代码可用于确定直线li1上的位置po1到直线li2上的位置po2之间的最短路径?我们有一组传送机T(每个传送机都有一个po和li),它们以零成本相互连接 为什么不是一个*或Dijkstra算法 这是因为我认为这在1D中是一种过度杀伤力 澄清Algorithm 使用'进行一维路径查找;传送机'; 问题,algorithm,path-finding,Algorithm,Path Finding,我想写一个简单的1D RTS游戏,有以下路径查找问题: 有许多一维线,到处都是传送带,它们可以在线之间传送,也可以在当前线内传送。传送机是在线路之间传送的唯一方式。什么算法或伪代码可用于确定直线li1上的位置po1到直线li2上的位置po2之间的最短路径?我们有一组传送机T(每个传送机都有一个po和li),它们以零成本相互连接 为什么不是一个*或Dijkstra算法 这是因为我认为这在1D中是一种过度杀伤力 澄清 这听起来可能有点二维,但这不是因为你只能在一条线上向左或向右移动 到传送者那里旅
- 这听起来可能有点二维,但这不是因为你只能在一条线上向左或向右移动
- 到传送者那里旅行是有成本的,但是从一个传送到另一个传送是没有成本的。 请参见此ascii艺术:
- 去右边的传送机
- 向下传送一行(仅在此图中;实际上飞机是无序的)
- 然后直接到达目标(最终成本=5)
这只会生成一个每个节点最多有四条边的图。所以,只需在内存中构建该图,并使用Dijkstra算法解决您的问题(这并不过分,因为我们不再“在”一维中)。这将比@Jakob建议的暴力算法快得多。我相信你可以通过结合从起点搜索和从终点搜索来改进Jakob的答案 在你的第一步,从起点开始,考虑2条搜索路径。 一条向左走的路和一条向右走的路 每次迭代在两条路径上进行一步,直到在其中一条路径上
这将在2n步中找到最短路径,其中n是该路径的长度。(因为你总是朝两个方向看)。平面现在是一维的了吗?据我所知,你有一个三维拓扑,或者只是一个简单的无向图。嗯,这听起来像是二维的。如果成本为0,那么如何定义最短路径?最少的远程传送?那么BF搜索应该可以做到这一点:-请澄清这是否不是你需要的。@IVlad,我想他的意思是一台传送机的两端互相连接,成本为零@Mafi,如果你真的是指1D,那么你不应该说线而不是平面吗?也许你的意思是,它们是游戏世界中的(部分)平面,但在“边缘透视”中,它们显示为水平线,只提供1度的运动?如果你沿着一条线旅行,来到一个传送带,你有选择是否接受它吗?也就是说,有没有可能在没有远程传送的情况下走过它?@LarsH很抱歉把它和“飞机”混淆了。英语不是我的母语。我知道,但是一条正常的路径(即不传送)可能比传送的路径短,或者可能有你无法通过的物体。在我看来,后者是有问题的。障碍物?你正在重新定义这个问题。。。否则,如果源和目的地在同一平面上,您有两个选项“它们之间的直线”和“如果源和目的地之间至少有两条直线,则使用传送机在它们之间的直线”。经过一些思考,您完全正确。忽略我的最后一篇文章和“对象”。不管怎么说,我真丢脸…@Justin,但是要检查的路径数量非常有限,所以不管怎么说都是O(1)。 ...0....s..0 ......0.x...