簡體   English   中英

返回靜態,遞歸的Java方法不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM