在给定条件下查找2D阵列中路径的最大长度

时间:2013-02-03 14:08:32

标签: java algorithm

嗨,我是堆叠溢出的新手。我需要帮助来解决java程序中的以下问题

我有一个2D数组,我需要找出可以从任何节点遍历的最大长度。如果它的值小于当前元素,我可以从一个元素遍历到连接元素(左/右/上/下)。我需要在2D整数数组中找到上述条件可能达到的最大路径  下面是5 * 5阵列

  7  2  3  4  5 
  36 37 38 34 6 
  33 44 46 40 7 
  24 43 42 41 8 
  35 32 47 30 9

上述阵列中最长路径为46-44-43-42-41-30-9-8-7-6-5-4-3-2总共14个。

请帮我写这篇Java代码。谢谢提前

1 个答案:

答案 0 :(得分:1)

将数据表示为graph,其中G=(V,E)V={ all squares}E = { (u,v) | u is adjacent to v and u.value < v.value)

请注意,上图是Directed Acyclic Graph(因为if(u,v)在E中,没有从vu的路径,因为它需要一条路径v->v1->v2->...->uv.value > v1.value > v2.value > .... > u.valueoperator>v.value > u.value,因此它意味着v.value < u.value,我们知道(u,v) - 因为E位于{{1}}这是一个矛盾,这样的路径不可能存在。)

减少之后 - 你可以简单地解决longest path in a DAG,这是一个更简单的问题。