Algorithm 在网格上查找点与行之间的最短路径

Algorithm 在网格上查找点与行之间的最短路径,algorithm,graph,shortest-path,Algorithm,Graph,Shortest Path,我知道有一些算法可以找到两点之间的最短路径,例如,中回答的算法 然而,现在,我有一个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

我知道有一些算法可以找到两点之间的最短路径,例如,中回答的算法

然而,现在,我有一个
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)
之间的每个最短路径,但这可能太慢了。有没有更有效的算法/方法来解决这个问题?

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

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

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

换句话说,如果可以解决一对节点之间的最短路径问题,则可以解决图中从任何节点到多个节点中任何一个节点的最短路径问题


你能找到一种方法来适应这种技术,这样你就可以在第一行的任何东西和最后一行的任何东西之间找到最短的路径吗?

这比在最下面一行的每个网格中循环要有效得多。谢谢编辑:只需在顶部添加另一个与顶行上任何节点的距离为0的节点。。。