例如,如果我有一个街道交叉点的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循环,但不了解我必须使用的逻辑来执行此操作。
答案 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算法实现,您可以自己实现,或者在网络上轻松找到它。
提示:如果你需要找到路径的值(按照你上面说的那样),你也可以保存第一个和最后一个元素的值,并将它们与路径的值相加。算法