在给定两个坐标的矩阵中计算最快距离的Pythonic方法?

时间:2014-05-04 01:19:35

标签: python algorithm list matrix

例如,如果我有一个街道交叉点的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循环,但不了解我必须使用的逻辑来执行此操作。

1 个答案:

答案 0 :(得分: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算法实现,您可以自己实现,或者在网络上轻松找到它。

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