我正在尝试开发一种算法,其中我有一个位置类。在每个类中,我创建一个相邻位置的列表。我想知道,我怎样才能获得从一个位置到另一个位置的最短路径。我试图寻找不同的算法,但似乎他们没有回答我的问题。
例如,我有一个A点,我想去B点,
A - - C - - H - - J
|
F- - K- -B
我的想法是,如果B位于A的相邻位置列表中,那么这是最短路径。如果没有,它应该搜索A的相邻位置的相邻位置。但是我不知道如何在代码中实现它或者它是一个好的算法。我还想显示A - C - F - K - B作为最短路径的路线。我也在j2me上开发这个,所以我对我可以使用的java功能有点限制。 如果有人可以帮助我,我将不胜感激。感谢
答案 0 :(得分:5)
你走在正确的轨道上。你所描述的是BFS的开始。 BFS是一个最短路径算法,optimal [找到最短路径]和complete [总是找到一个路径,如果存在的话]为未加权图 - 所以它可能是正确的选择。
BFS适用于图表。在这里,您的图表为G = (V,E)
,以便V = {all locations}
[节点/顶点/位置]和E = {(u,v),(v,u) | u and v are neighbors}
[边/链接/邻居]
BFS的想法与您的建议完全相同:首先检查起始节点是否也是目标。然后检查起始节点的一个邻居是否是目标,然后搜索他们的邻居....
关于从BFS获取实际路径:查看this post。
我的想法是维护一张地图 - 对于每个节点[位置] - 地图将指示你是如何到达那里的?哪个节点发现了它? BFS完成后 - 按照从目标到源的地图,然后获得实际路径[逆转当然]。提供的链接提供了有关此想法的更多详细信息。
答案 1 :(得分:4)
您的问题在计算世界中被称为图搜索问题,寻找两个节点之间的最短路径。此处的图形不是数学中的x轴和y轴图形,而是通过边连接的节点(或示例中的Locations
)。
Dijkstra's algorithm是最常用于查找两个节点之间的最短路径的,并且对于您的用例,它会略微简化,因为场景中的边缘都具有一个权重(或成本)。 JGraphT中提供了此实现,但我不确定在J2ME环境中包含它是多么容易。
答案 2 :(得分:0)
查看A*
算法Dijkstra的寻路算法。