找到从给定n x n矩阵最左边的任何元素到矩阵最右边的任何元素的最短路径。
运动:运动一次只能是一个方格。您可以向左,向右,向上,向上,向右,向左,向右移动。
重量:在矩阵上从X元素移动到Y的成本是| Y - X |
运行时:设计的算法必须至多为O(n 2 )
运行时间为O(n 2 Log n 2 ),它比O(n 2 )慢。
答案 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帮助更困惑。添加了一个示例。]