【问题标题】:Dijkstra's algorithm in Java for matrix with obstacles [closed]Java中用于障碍物矩阵的Dijkstra算法[关闭]
【发布时间】:2014-07-12 21:31:12
【问题描述】:

我正在尝试实现 Dijkstra 算法,以找到网格 (x,y) 中 2 点之间的最短路径,但问题是我只能向上、向下、向右和向左移动。

我有一个 ArrayList 包含我需要传递的点的 x 和 ys 以及另一个 ArrayList 的点是网格上的障碍物,我正在尝试编写一个函数,该函数返回一个 ArrayList 所需的运动为了完成所有的路径。

例如:1,1,1,2,3,4,1.. 1 右 2 左 3 上 4 下。

能否请您提供一些提示和/或示例。

【问题讨论】:

  • 对于具有单位长度边的网格子图,您不应该使用 dijkstra;改用 BFS。原因是优先队列会给你与简单队列完全相同的边界。
  • @G.Bach 我同意。 A* 搜索是一种 BFS(最佳优先搜索)算法。
  • @Daniel 实际上 A* 是一个有根据的 dijkstra(当使用 A* 且所有 v 的 h(v)=0 时,你会得到 dijkstra)
  • 不知道为什么这个问题被赞成。在评论中回答它然后删除它应该已经足够了,像这样的问题已经被问到dozensoftimes。您需要做的就是搜索“网格最短路径”。
  • 你知道你应该使用 Dijkstra's - 好的,那么问题出在哪里?这是 Dijkstra 的一个非常简单的应用程序,将任何通用伪代码转换为 Java 代码来解决您的问题应该非常简单,如果您要寻找它,您可能会找到解决这个确切问题的 Java 代码。请尝试就您面临的问题提出更具体的问题。

标签: java algorithm arraylist


【解决方案1】:

首先,要知道 Dijkstra 的算法传统上是用于加权图的。它仍然可以与单位边(所有权重为 1)一起使用,但它可能不是您最有效的解决方案。

无论您使用哪种算法,您都需要将网格视为图形。为此,请制作一组边。如果除了“无对角线”之外没有任何限制,那么您的边缘将是每个点与其上方、下方和旁边的邻居之间的连接。然后,您可以通过迭代图上的边和点来对图进行操作。

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多