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

时间:2016-02-10 08:08:45

标签: java algorithm computer-science

我知道,如果给出如下矩阵,这是一个老问题。

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

从给定的位置开始,从右到左,只向右或向上或向下移动,不能以同样的方式返回并在右边停止,找到获得最大值的路径。

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

我想知道是否还有其他想法或方法可以提供更好的解决方案?如果可能的话,更快的解决方案?

2 个答案:

答案 0 :(得分:2)

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

大纲是:

  1. 您存储步骤列表(向右,向上,向下)
  2. 你可以说深度优先,如果可以的话,尝试迈出新的一步
  3. 如果你不能,只需返回一个并将步骤改为下一个可能的方向。 (如果它比以前存储的路径好,则存储此路径。)
  4. 如果该步骤没有下一个可能的方向,请重复3。
  5. 如果所有可能性都已用尽,请返回存储的最佳路径。
  6. 回顾维基百科:https://en.wikipedia.org/wiki/Backtracking

答案 1 :(得分:2)

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

enter image description here

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

现在运行longest path in directed acyclic graph