對於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