在矩阵上查找路径以获得最大值

Find path on a matrix to get max value

我知道,这是一个老问题,如果给出这样的矩阵:

[1 1 2 3,
 2 3 4 4,
 3 4 1 3,
 2 1 3 4]

从给定的位置开始,从右到左,只能向右或向上或向下移动,不能原路返回右停,求取最大值的路径。

我正在考虑使用DP(可能需要尝试所有可能的路径并计算值),但它似乎会花费大量内存,因为它存储了所有可能的解决方案并且也可能很慢。

请问有没有其他想法或方法可以做出更好的解决方案?如果可能,更快的解决方案?

如果你想优化内存,你可以试试回溯。这将只涉及存储当前路径,以及最佳解决方案的路径和值。

大纲是:

  1. 您存储了步数列表(右、上、下)
  2. 可以这么说,你走的是深度优先,如果可以的话,尝试迈出新的一步
  3. 如果你做不到,就返回一个并改变步骤到下一个可能的方向。 (如果它比以前存储的更好,请存储此路径)。
  4. 如果该步骤没有下一个可能的方向,请重复 3。
  5. 如果穷尽所有可能性,return存储的最佳路径。

维基百科回溯:https://en.wikipedia.org/wiki/Backtracking

我认为有一种方法可以做 DP,但我无法快速找到它。因为目前还没有人回答我就给出一个图的方法。创建一个有向图,其中从 A 到 B 的边将等于该顶点中的数字。从您的描述中可以清楚地看出它不会有任何循环。你会得到这样的网格图,但只是定向的:

现在在右侧的某处获取一个顶点源并将其连接到第一层(将所有边都设为0)。与目的地相同,但它在左侧。

现在运行longest path in directed acyclic graph