java - 在给定条件下查找二维数组中路径的最大长度

标签 java algorithm

您好,我是堆栈溢出的新手。我需要帮助解决 Java 程序中的以下问题

我有一个二维数组,我需要找出可以从任何节点遍历的最大长度。如果它的值小于当前元素,我可以从一个元素遍历到连接的元素(左/右/上/下)。我需要在二维整数数组中找到上述条件可能的最大路径 下面是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 代码。提前致谢

最佳答案

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

请注意,上图是一个 Directed Acyclic Graph(因为如果 (u,v) 在 E 中,则没有从 vu 的路径,因为它需要一条路径 v->v1->v2->...->u 这样 v.value > v1.value > v2.value > .... > u.value ,但是 operator> 是可传递的,所以这意味着v.value > u.value ,而我们知道 v.value < u.value - 因为 (u,v)E 中,所以矛盾,这样的路径不存在。

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

关于java - 在给定条件下查找二维数组中路径的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14673333/

相关文章:

java - 从4.3.11.Final版本切换到5.0.1.Final导致编译报错

php - PHP 中的目标搜索功能

arrays - 如何生成具有特定属性的位序列

java - DSL 或 Java Fluent API 设计是否会影响应用程序性能?

java - int[][] 无法转换为 int

java - 如何追溯方法到它们的类然后到它们的包? Java语法

java - Java中没有顶级类的情况下访问非顶级类

java - 合并排序和java实现

algorithm - 无重复数的最长连续子序列

c++ - 打印用户给出的反转数字的算法?