最短路径加权矩阵

时间:2016-12-13 18:38:07

标签: c++ algorithm matrix path shortest-path

找到从给定n x n矩阵最左边的任何元素到矩阵最右边的任何元素的最短路径。

运动:运动一次只能是一个方格。您可以向左,向右,向上,向上,向右,向左,向右移动。

重量:在矩阵上从X元素移动到Y的成本是| Y - X |

运行时:设计的算法必须至多为O(n 2

示例:

Example

试了很久:

Tried so far

此解决方案存在问题。

运行时间为O(n 2 Log n 2 ),它比O(n 2 )慢。

1 个答案:

答案 0 :(得分:1)

当您考虑图表中的边缘时,您可以利用它,您的图形是非循环的,并且具有(部分)拓扑顺序。在这种情况下,您可以从左到右计算每个节点左侧的距离,即列bei列。

在第一列中,所有节点的距离均为0,即d(左上)= 0,d(左中)= 0,d(左下)= 0.

在第二个(以及所有后续)列中,您最多有三个候选值可以从中选择最小值,例如d(中上)= MIN [d(左上)+ 4,d(左中) )2] = 2。

也就是说,从左到右计算值只需要每个节点的恒定时间,整体上为Theta(n ^ 2)。更一般地,对于N个节点和M个边缘,这需要O(NM)用于单源最短路径计算。

[编辑:我删除了对动态编程的引用,因为它比ist帮助更困惑。添加了一个示例。]