【问题标题】:Finding shortest path in 2d array在二维数组中查找最短路径
【发布时间】:2019-03-19 11:17:00
【问题描述】:

我需要找到从左上角到右下角的最短路径。

规则是它必须从 ABAB 等等。 p>

以图片为例:

上图的预期输出是13

我正在尝试使用 dijkstra 算法在 java 中实现这一点,但后来卡住了。这是正确的方法吗?

【问题讨论】:

  • 这需要在图像上实现吗? @大卫
  • Dijsktra's algorithm 肯定是解决问题的一种方法(另一种可行的算法可能是A*)。你应该告诉我们你到底在哪里卡住了(如果是代码问题,那么显示你到目前为止的代码)但我猜它与图表的布局有关。基本上你可以假设如果两个相邻的单元格具有相同的值,那么它们之间就有一个“墙”,所以图形的边缘只能在具有不同值的相邻单元格之间。
  • 我正在尝试用 Java 实现它
  • 执行A* algorithm即可。
  • 那么你有什么尝试?关于这个主题有很多页面。 baeldung.com/java-dijkstra

标签: java algorithm graph-theory shortest-path


【解决方案1】:

如果目标是找到从左上角到右下角(或任意 2 点之间)的最短路径,dijsktra 是一种可能的方法,但是您必须根据输入正确构建图形。

在这种情况下,我会选择一个简单的flood-fill 算法。你可以找到几个在线资源来解释它,包括this videothis article,所以我不会在这个答案中详细说明。

如果您正确实施规则(仅 A 到 B 和 B 到 A),您可以仅使用 2 个矩阵(一个用于原始字母数组,一个用于距离)找到最短路线。

【讨论】:

    【解决方案2】:

    您可以使用任何图形遍历算法或任何寻路算法。 T,这里有很多A*、Dijekstra、BFS、DFS等算法……

    例如,让我们以 BFS 为例,它找到图的 2 个节点之间的最短路径。假设您的二维数组是一个图,如果 2 个节点之间的距离为 1,并且其中一个节点为 A,第二个节点为 B,则边缘处于条件状态。在此处阅读有关 BFS 的模式 (https://en.wikipedia.org/wiki/Breadth-first_search)

    只需从矩阵构造图形并为图形实现 BFS,或者您可以简单地为数组实现 BFS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 2020-09-19
      • 2021-02-12
      相关资源
      最近更新 更多