我有一个网格图,我需要找到两个节点之间的最短路径,但路径必须包含一些节点。
我想过尝试所有排列,但是地图大小和必须节点的数量是可变的,所以我想使用最优算法。
地图将类似于此: map
-Dark brown square at Y18 is the start point
-Light brown squares from B20 to S20 are the end point (can make just one end point if needed)
-White squares are walls (you cannot go through them)
-Blue squares means that the point in front of it is a must-pass (for example, the blue square at q5-q6 means must pass zone of p5-p6)
我将使用Java,我将使该地图成为一个连接它们的图形(例如s10与s9,o10和s11连接)。
非常感谢你的帮助,如果你有任何问题,请问。
答案 0 :(得分:1)
据我了解,这是两个问题的结合;你有说明点,目标节点和强制中间节点。为了确定最短路径,您必须计算起始节点和所有中间节点之间的距离,所有中间节点对以及从每个中间节点到目的地的距离。如果仅涉及非负边权重,则可以使用Dijkstra算法完成此操作。
计算完所有距离后,必须计算从起始节点到目标节点的最佳Hamiltonian path,其中使用了所有中间节点。但是,由于这个问题是NP-hard,很可能无法使用有效算法解决;强制执行所有排列可能是可行的。
答案 1 :(得分:0)
渐近可能这不会有帮助,因为你仍然必须解决汉密尔顿路径,但要计算每个节点之间的距离,你可以使用Floyd-Warshall代替加速一点点。