【问题标题】:Shortest path weighted matrix最短路径加权矩阵
【发布时间】:2016-12-13 18:38:07
【问题描述】:

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

移动:一次只能移动一个方格。您可以向左、向右、左上、右上、左下和右下移动。

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

运行时:设计的算法必须最多 O(n2)

例子:

到目前为止尝试过:

这个解决方案有问题。

运行时间为 O(n2 Log n2),比 O(n2) 慢。

【问题讨论】:

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


    【解决方案1】:

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

    在第一列中,这个距离对于所有节点都是 0,即 d(左上)=0,d(左中)=0,d(左下)=0。

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

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

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

    【讨论】:

    • 我有点困惑,如何调用动态解决方案?基本情况和其他条件是什么?行和列代表什么?
    猜你喜欢
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2022-12-20
    • 2014-06-26
    相关资源
    最近更新 更多