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

在给定两个坐标的矩阵中计算最快距离的Python方法?,python,algorithm,list,matrix,Python,Algorithm,List,Matrix,例如,如果目标位于右下角(位置X-1,Y-1),则街道交叉口的X X X Y网格。如何计算给定矩阵的距离 例如,如果输入矩阵为 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循环,

例如,如果目标位于右下角(位置X-1,Y-1),则街道交叉口的X X X Y网格。如何计算给定矩阵的距离

例如,如果输入矩阵为

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 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算法实现,您可以自己实现,也可以在web上轻松找到


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

您只能向右和向下移动(而不是向左和向上移动)?正确,只能向右和向下。我必须说这是一个困难的问题。尝试递归?不要重新发明轮子,这个问题已被广泛研究。提示:您采取的最后一步必须来自两个位置之一:在您的示例中,可以是(2,1)或(1,2)。如果您可以计算到这两个位置的最短距离,您可以通过比较两个成本快速计算答案。所以如何计算这两个最短距离?:)是的,我知道Dijkstra的算法。我在想,使用Python会有一种不同的解决方法。还是谢谢你的建议。