如何使用Java中的Dijkstra算法找到平方网格中的最短对角线路径?

时间:2017-04-29 08:22:19

标签: algorithm dijkstra

我正在开发一个使用Dijkstra算法的系统,用Java显示平方网格中的最短路径。当路径到达靠近的对角线,垂直或水平单元时,路径成本增加1.但路径的优先级应该通过对角线单元。只有当附近没有可能的对角线单元时,路径才能通过垂直或水平单元。最方便的方法是什么?

1 个答案:

答案 0 :(得分:0)

在Dijkstra算法中,我们继续选择尚未选择的顶点和距离源最小的顶点。这里每个下一个顶点或下一个正方形距离都相等,距离为1。在具有最小距离的正方形中,如果尚未包括对角线正方形,则包括它,否则选择水平侧向或垂直侧向正方形。从实现的角度来看它只是使用if .. else构造。您可以为节点的优先级维护一些字段。保持优先级为对角线方形,否则为零。

此外 Dijkstra的算法并不适合这个问题,因为Dijkstra的算法用于找到从单个源顶点到其他所有顶点的最短路径。给定图表。虽然您在问题中没有提到,但您打算找到从特定源方块到特定目标方块的最短路径。

此外,所有可到达的方格都是等距的,所以在这里使用Dijkstra算法没有乐趣。 或者,您可以使用DFS或BFS将网格视为图形。对于另一个替代方案,您可能还要查看此问题的动态编程样式,您可以在其中找到一些示例here