繁体   English   中英

有条件的寻路算法

[英]Path finding algorithm with condition

我有三个Java模型类: MapRoomObject 这些是使用JAXB从以下XML文件映射的:

<map>
   <room id="1" name="Stairway" east="2"/>
   <room id="2" name="Kitchen" north="4" south="3" west="1">
       <object name="Hat"/>
   </room>
   <room id="3" name="Hallway" east="1" south="4">
       <object name="Money"/>
   </room>
   <room id="4" name="Bathroom" south="2"/>
</map>

一个Map包含Room ,一个Room可以包含Object 每个Room都有指示从那里可以到达其他Room的属性(北/东/西/南)。
例如,从3号房出发的可能指示:
1号房 (东)
4室 (南)

还有一个单独的Object列表,我们称它们为target

目标是“收集”所有目标 ,这意味着通过包含目标的Room创建一条路径。
您可以将其视为具有节点( Room )和边缘(通向另一个Room北/东/西/南方向)的图形( Map )。

public Route findRoute(Map map, Room startRoom, List<Object> targets) {
        // walk through the map, find all targets 
        // once found them all return the route
}

因此,基本上,我正在寻找一种干净的方法/算法来创建通过该图的路径,其中每个节点都包含目标列表中的一个Object

我知道Dijkstra算法,但是我认为它不适合我的用例,因为我有一个必须满足的条件( Room必须包含一个特定的Object )。 其他的寻路算法很少,但我无法为我的特定问题找到解决方案。

任何帮助表示赞赏。

编辑:

任何路径都可以(最短路径是一个不错的选择,但不是强制性的),并且收集目标的顺序无关紧要。

这是一种粗略的方法:

  1. 让入口作为初始起点。
  2. 选择一个尚未达到的目标。
  3. 执行广度优先(或深度优先)搜索以找到该目标的路径,并标记沿该路径遇到的其他目标。
  4. 如果已找到所有目标,则停止。
  5. 让所选目标所在的房间成为下一个起点。
  6. 转到(2)。

据我了解,通过连接所有段形成的路径将满足您的要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM