我有一个用Java做的小程序。我有一个用0和1填充的2D数组,我必须找到最大的菱形(如旋转45度的正方形)和它们的数字。

例:

0 1 0 0 0 1

1 0 1 1 1 0

1 0 1 1 1 1

0 1 1 1 1 1

0 0 1 1 1 1

1 1 1 1 1 1


结果:

      1个

    1 1 1

  1 1 1 1 1

    1 1 1

      1个


问题类似于this SO question

如果您有任何想法,请在此处发布。

最佳答案

这个评论太久了。如果您无法解决,我将在稍后发布我的解决方案,但是这是我的解决方法(用不到15行代码):我首先创建了第二个数组(稍大[n + 2] [ n + 2]),并通过了n / 2:

0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0
0 1 0 1 1 1 0 0
0 1 0 1 2 2 1 0
0 0 1 2 2 2 1 0
0 0 0 1 2 2 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0
0 1 0 1 1 1 0 0
0 1 0 1 2 2 1 0
0 0 1 2 3 2 1 0
0 0 0 1 2 2 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0


其中非零数字x表示“我是大小为x的菱形的中心”(我表示的大小是与菱形的对角线长度(在您的情况下都相等)有关)。您可以通过检查{top,right,down,left}是否都是大小为k的菱形中心来找到大小为(k + 1)的菱形中心。

首先创建一个更大的数组的好处是,它确实简化了您的逻辑,但是我可以使用更复杂的逻辑,通过修改原始数组或使用与输入大小相同的第二个数组来进行处理(再次,只需在输入周围放一个全零的安全“栅栏”,就更容易了。

如果您不使用围栅“包围”您的数组,那么您将有很多其他的if / else检查:这将容易出错,导致代码更大,代码更丑陋。

关于java - 动态编程:查找最大的菱形(菱形),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2607959/

10-10 22:47