对于nXn矩阵,我有以下问题: ,我们将定义一个大小为k的“蠕虫”,它是一系列具有连续数字的相邻单元格。相邻单元格是当前单元格的右\左\上\下单元格(而不是对角线)。 我需要编写一个递归函数,其返回的最长蠕虫在阵列 例如:在矩阵:递归 - 找到矩阵中最大的蠕虫
{{3,4,5,6},
{5,6,2,7},
{12,13,14,15},
{19,18,17,16}};
最长蠕虫是8个细胞。从[2] [0]开始到[3] [0]结束。
到目前为止,我已经写了下面的代码:
public static int longestWarm(int[][] arr, int row, int col) {
if (row < 0 || row >= arr.length || col < 0 || col >= arr.length) return 0;
if (col >= arr.length || row >= arr.length) return 0;
int sum1 = 1, sum2 = 1, sum3 = 1, sum4 = 1;
if (row > 0 && arr[row][col] == arr[row - 1][col] - 1)
sum1 = 1 + longestWarm(arr, row - 1,col);
else if (row < arr[0].length - 1 && arr[row][col] == arr[row + 1][col] - 1)
sum2 = 1 + longestWarm(arr, row + 1, col);
else if (col > 0 && arr[row][col] == arr[row][col - 1] - 1)
sum3 = 1 + longestWarm(arr, row, col - 1);
else if (col < arr[0].length - 1 && arr[row][col] == arr[row][col + 1] - 1)
sum4 = 1 + longestWarm(arr, row, col + 1);
int max1 = Math.max(sum1, sum2);
int max2 = Math.max(sum3, sum4);
return Math.max(max1, max2);
}
的问题是我得到的第一个蠕虫病毒,我在矩阵找到,而不是最大的一个。我的输出是5而不是8. 请帮助找到我做错了什么。
欢迎堆栈溢出!它看起来像你需要学习使用调试器。请帮助一些[互补调试技术](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。如果您之后仍然遇到问题,请随时返回一个[最小,完整且可验证的示例](http://stackoverflow.com/help/mcve),以说明您的问题。 –
我想你想摆脱'else's。此外,在顶层,您需要调用您为每个数组元素提交一次的方法,并取得最大的结果。 –
@JohnBollinger感谢他的工作,现在我创建了另一种方法,检查当前计数是否大于maxcount,然后返回最大 – Meni