如何找到二维数组中最长的序列?

时间:2018-11-21 03:30:05

标签: algorithm recursion data-structures dynamic-programming

考虑到具有以下约束的二维网格,我想找到最长的子序列:

  1. 允许对角向上,向右,向左,向下移动
  2. 当前值与下一个值之间的差应大于或等于3(即绝对差)。
  3. 访问过的单元格不应重复
  4. 网格最大为10 x 10
  5. 在以下示例中,
  6. 不允许执行4-> 9

示例:

824
061
379

上述输入的最长路径的长度为8,序列为9,1,6,2,8,0,7,3

我厌倦了使用多个for循环的方法,但是这样做效率极低。我想知道如何使用动态编程。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

只需遵循约束,即可从网格中的每个可能来源运行bfs (Breadth-first search)。例如,在给定的样本输入中,可能的来源数量为9。然后,将路径保存在某些合适的数据结构中。保存路径后,检查哪个路径最长,这就是您的答案。