【问题标题】:Finding the shortest path between a point and a row on a grid在网格上查找点和行之间的最短路径
【发布时间】:2016-07-22 17:11:33
【问题描述】:

我知道有一些算法可以找到两点之间的最短路径,例如How to calculate the shortest path between two points in a grid中回答的算法。

但是,现在,我有一个N * M 网格,其中行从 0 到 N - 1,列从 0 到 M - 1,其中每个网格都包含障碍物(或者您可以将其视为两个之间的距离网格)。例如,我下面有一个 4 * 4 的网格:

5   7   8   2
2   7   4   3
6   4   3   2
5   7   2   5

我想找到左上角和底行之间的最短距离,即(0, 0)(X, 3)之间,其中X可以是0到3之间的任何数字。

我可以找出(0, 0) -> (0, 3)(0, 0) -> (3, 3) 之间的每条最短路径,但这可能太慢了。有没有更有效的算法/方法来解决这个问题?

【问题讨论】:

    标签: algorithm graph shortest-path


    【解决方案1】:

    这比你想象的要多,有一个很好的方法来解决这个问题。

    您可以想象您的网格是一个图表。每个单元格都是一个节点,每个单元格到每个相邻单元格之间都有边,并且具有适当的成本。

    考虑在图中添加一个新节点,并通过成本为零的边将最后一行中的所有内容连接到该新节点。现在,考虑找到从左上角到刚刚添加的神奇新节点的最短路径。那里的最短路径将对应于通过网格的路径,该路径在最后一步离开最后一行并进入这个新节点。由于边到新节点的成本为零,因此从左上角节点到这个新节点的最便宜路径的成本是从左上角到最后一行中任何单元格的最佳路径的成本.

    换句话说,如果你能解决一对节点之间的最短路径问题,你就可以解决从任意节点到图中任意一个节点的最短路径问题。

    你能找到一种方法来调整这种技术,以便你也可以找到第一行中的任何东西和最后一行中的任何东西之间的最短路径吗?

    【讨论】:

    • 这比遍历底行中的每个网格要高效得多。谢谢!编辑:只需在顶部添加另一个节点,与顶行上的任何节点的距离为 0...
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多