我有三个Java模型类:Map
,Room
,Object
。这些是使用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
s的单独列表,我们称之为目标。
目标是“收集”所有目标,这意味着创建一条包含目标的Room
路径。
您可以将其视为带有节点(Map
)和边(向北/东/西/南方向指向另一个Room
)的图形(Room
)。
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
)。其他路径查找算法很少,但我找不到解决我的特定问题的方法。
任何帮助表示感谢。
编辑:
任何路径都可以(最短路径是一个很好的,但不是强制性的),并且收集目标的顺序并不重要。
答案 0 :(得分:0)
这是一个粗略的方法:
根据我的理解,加入所有细分所形成的路径将满足您的要求。