好的,所以我試圖讓一個Java程序來解決picross板,但我不斷收到一個Stackoverflow錯誤。我現在只是教自己一點Java,所以我喜歡使用我所知道的東西,而不是在網上找到解決方案,儘管我的方式顯然不是那麼高效。我能想到解決這個問題的唯一方法就是通過一種蠻力,嘗試一切可能性。事情是,我知道這個函數可以工作,因爲它適用於較小尺寸的電路板,唯一的問題是,在較大的電路板上,我傾向於在函數完成之前得到錯誤。遞歸Stackoverflow錯誤
所以char[][] a
只是與所有的X和O的遊戲板。 int[][] b
是一個數組,其數字分配給picross板,如遊戲頂部和左側的數字。 isDone()
只是檢查董事會是否與給定的數字匹配,並且shift()
向下移動一列。我不想粘貼我的整個程序,所以如果你需要更多信息,請告訴我。謝謝!
我添加了代碼,因爲有人問。 Shift只是將一行中的所有字符移動一個單元格。
更新:我在想,也許我的代碼沒有旋轉通過每個組合,所以它跳過了正確的答案。任何人都可以驗證這實際上是嘗試每種可能的組合嗎?因爲這將解釋爲什麼我得到stackoverflow錯誤。但另一方面,在它太多之前,可以經歷多少次迭代?
public static void shifter(char[][] a, int[][] b, int[] clockwork)
{
boolean correct = true;
correct = isDone(a, b);
if(correct)
return;
clockwork[a[0].length - 1]++;
for(int x = a[0].length - 1; x > 0; x--)
{
if(clockwork[x] > a.length)
{
shift(a, x - 1);
clockwork[x - 1]++;
clockwork[x] = 1;
}
correct = isDone(a, b);
if(correct)
return;
}
shift(a, a[0].length - 1);
correct = isDone(a, b);
if(correct)
return;
shifter(a, b, clockwork);
return;
}
public static char[][] shift(char[][] a, int y)
{
char temp = a[0][y];
for(int shifter = 0; shifter < a.length - 1; shifter++)
{
a[shifter][y] = a[shifter + 1][y];
}
a[a.length - 1][y] = temp;
return a;
}
經過多少迭代/遞歸它炸燬了? – Tom
考慮使移位器成爲void函數而不是返回[] []。 java中已經通過引用傳遞[] []。 – Tom
呃,我不確定它究竟會經歷多少次迭代。它看起來是5x5板的一個很好的部分。碰撞前通常可以處理多少個?我將如何去做移動無效功能? –