[英]Return off a static, recursive Java method doesn't work
我嘗試實現Sudoku-Solver。 我正在調用方法printSoluition(board),並且應該打印出解決方案(如果存在)或為null。
我正在嘗試一個具有一種解決方案的示例。 但是它總是返回null。
我的代碼:
static void printSolution(SudokuBoard board) {
SudokuBoard resultBoard = findSolution(board);
if(resultBoard != null) {
resultBoard.print();
}
}
static SudokuBoard findSolution(SudokuBoard board) {
if (board.isSolved()) {
return board;
} else {
int nextEmptyField = getNextFreeIndex(board);
if (nextEmptyField != -1) {
int[] kandidaten = board.getCandidates(nextEmptyField);
for (int i = 0; i < kandidaten.length; i++) {
SudokuBoard newBoard = board.set(nextEmptyField,
kandidaten[i]);
return findSolution(newBoard);
}
}
return null;
}
}
使用回溯實現的遞歸是不正確的,因為您的for
循環永遠不會超過第一個候選對象。
您需要更改循環以僅在找到解決方案時才返回:
for (int i = 0; i < kandidaten.length; i++) {
SudokuBoard newBoard = board.set(freiesNaechstesFeld, kandidaten[i]);
SudokuBoard solution = findSolution(newBoard);
if (solution != null {
return solution;
}
}
現在將嘗試所有調用級別的所有候選者,因此最終您將獲得一個解決方案(當然,假設找到並設置候選者的“幫助”方法可以正常工作)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.