私は3種類の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
Sが含まれているとRoom
はObject
秒を含めることができます。各Room
には、そこから(北/東/西/南)どの他のRoom
に到達できるのかを示す属性があります。
など。 部屋3から可能な方向:
部屋1(東)
部屋4(南)
Object
秒の別々のリストもあり、のは、目標それらを呼びましょう。
すべてのターゲットを「収集」することは、ターゲットを含む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
が含まれていなければなりません)。他にもいくつかの経路発見アルゴリズムがありますが、私の特定の問題に対する解決策を見つけることができませんでした。
助けてください。
EDIT:
任意のパスが行います(最短経路をへの持っている、素敵な、しかし必須ではありません)とターゲットが収集されるの順番は重要ではありません。
*最短*のパスを見つけようとしていますか、それともすべてのパスがありますか? –
どのような経路でも、ターゲットが収集される順序は関係ありません。 – lenny
Dijkstraのアルゴリズムは、ループを含むパスを見つけることができず、そのようなパスが必要な場合があります。たとえば、入口/出口が1つだけの部屋にオブジェクトがある場合などです。 –