在地图上找到最短的反向路径,这种算法是否存在?

时间:2014-03-09 12:26:51

标签: algorithm graph map path

我正在寻找名称(如果此类算法已存在)或帮助构建它,因为我不知道从哪里开始。

首先,看看两个场景 map http://cap.ring0.cc/2d9b8cb8ce1666bd5283ae1df34b9e25.png

什么是:

  • 蓝色街区是步行街区
  • 白色块是非步行块
  • 所有区块均为1x1
  • 绿色区块是起点/目的地点
  • 红点是航路点(检查站)
  • 数字表示访问顺序
  • 每个街区都有x,y坐标
  • 地图可以有任何形状

它是如何运作的:

  • 机器人从绿色区块开始移动到航路点1,然后访问23,依此类推,直至再次到达起点
  • 机器人能够自己找到最短的路径。
  • 我通过向他展示下一个航点位置来导航它。
  • 下一个航点不能超过5个街区(也许在这个例子中我在某个地方超过了这个值,但假设它不超过5个)
  • 算法可能会假设所有航路点都已正确创建(因此机器人永远不会出现最近航路点超过5个街区的情况)

问题:

假设僵尸现在位于红色箭头指示的位置之一。从这一点来说,他必须停止他的道路并找到回家的最短路。问题是我不能给它绿色块的X,Y坐标,因为它太过分了。因此,如果机器人现在位于阻拦X,它应该移动到航点16并继续正常,如果它位于Y位置,它应该移动到航路点17(! !),从位置Z开始,它应该移动到WP 2然后转移到1(实际上是倒退,与场景1不同)。

限制

  • 每个点只包含x,y coors,不存储其他参数
  • 地图文件只能向下读取,因此如果我想构建一个“反向路径”,我必须创建一个向后的单独列表
  • 我定义路径文件的方式如下:

    <!-- forward -->
    <WP name="3" />
    <point x=1 y=1 />
    <WP name="4" />
    <point x=1 y=4 />
    <WP name="5" />
    <point x=1 y=9 />
    <WP name="6" />
    <point x=4 y=9 />
    <WP name="7" />
    <point x=7 y=9 />
    
    <!-- cur pos 7 9 -->
    
    <!-- backward -->
    <WP name="8" />
    <point x=4 y=9 />
    <WP name="9" />
    <point x=1 y=9 />
    <WP name="10" />
    <point x=1 y=4 />
    <WP name="11 />
    <point x=1 y=1 />
    <WP name="7" />
    
  • 我可用的函数是:getMyPosition()goToWp(name) - 使用此函数我在WP中的mapfile中插入我的“游标”,名称我作为参数传递,之后它继续作为参数在mapfile中,向下。

最终的解决方案可以在每个可能的路径中写入mapfile但是对于大型地图来说需要很长时间:)

注意事项:

  • 同样,一些路径正在倒退(如方案2中所示)。也许有一种算法可以找到我的位置和退出之间的所有点?
  • 有2个文件:地图文件和脚本文件。地图文件是带有坐标和航点的XML文件,其中脚本文件是JS文件,我可以写任何我想要的内容。
  • 请注意,我也可以将所有这些路标存储在JS文件中,例如我可以用x,y coords构建一个点表,如果可以帮助
  • 算法效率不高,甚至可以是n!
  • 脚本无法告诉机器人去x,y位置。它只能给他在地图文件中定义的航路点。

这是一个很长的问题,我希望我能以某种方式解释它,以便你能理解这个想法。谢谢你的时间。

0 个答案:

没有答案