【问题标题】:Pythonic way to calculate fastest distance in matrix given two coordinates?在给定两个坐标的情况下计算矩阵中最快距离的 Pythonic 方法?
【发布时间】:2014-05-04 01:19:34
【问题描述】:

例如,如果我有一个 X 到 Y 的街道交叉点网格,目的地位于右下角(位置 x-1,y-1)。你如何计算给定矩阵的距离?

例如,如果输入矩阵是

matrix=[[1,2,1],
        [2,3,2],
        [1,2,1]]

如果给定坐标 (0,0),在本例中为 1,并且想要到达 (2,2),这也是右下角的 1,那么最快的距离是 7(向右和向下)。

您也可以向右走,然后向下走,然后向右走,然后再向下走。这是8的距离:1+2+3+2+1=8。

你如何找到最短路径?你只能向右和向下移动。我正在尝试使用嵌套的 for 循环,但不了解我必须使用的逻辑。

【问题讨论】:

  • 只能左右移动(不能左右移动)吗?
  • 正确,只有右下角。
  • 我必须说这是一个难题。试试递归?
  • 不要重新发明轮子,这个问题被广泛研究。 A* search algorithm
  • 提示:您采取的最后一步必须来自以下两个位置之一:在您的示例中,是 (2, 1) 或 (1, 2)。如果您可以计算出到这两个位置的最短距离,则只需比较两个成本即可快速计算出答案。那么......你如何计算这两个最短距离? :)

标签: python algorithm list matrix


【解决方案1】:

我认为这是一个应该建模为图形问题的问题。因此,您可以使用诸如Dijkstra algorithm 之类的算法来找到最短路径。

您可以先将您的矩阵转换为图形数据结构(例如邻接矩阵):矩阵的每个元素都是一个顶点,元素的值是边成本。元素之间只有垂直或水平相邻的边,在这种情况下,这也是一个有向图。

1 [[0 2 0 2 0 0 0 0 0],
2  [1 0 1 0 3 0 0 0 0],
3  [0 2 0 0 0 2 0 0 0],
4  [1 0 0 0 3 0 1 0 0],
5  [0 2 0 2 0 2 0 2 0],
6  [0 0 1 0 3 0 0 0 1],
7  [0 0 0 2 0 0 0 2 0],
8  [0 0 0 0 3 0 1 0 1],
9  [0 0 0 0 0 2 0 2 0]]

之后,只需使用 Dijkstra 算法实现即可,您可以自行实现,也可以在网上轻松找到。

提示:如果你需要找到路径的值(按照你上面说的方式),你也可以保存第一个和最后一个元素的值,并将它们与找到的路径的值相加算法。

【讨论】:

  • 是的,我知道 Dijkstra 的算法。我在想虽然会有一种不同的方法来使用 Python 来解决它。仍然感谢您的建议。
猜你喜欢
  • 2011-05-30
  • 2016-06-27
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多