java - 返回静态、递归 Java 方法不起作用

标签 java recursion

我尝试实现一个数独求解器。我正在调用 printSoluition(board) 方法,它应该打印出解决方案(如果存在或为空)。

我正在尝试一个有一个解决方案的示例。但它总是返回 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;
    }
}

现在所有调用级别的所有候选项都将被尝试,因此最终您将得到一个解决方案(当然,假设您的“帮助程序”方法可以很好地查找和设置候选项)。

关于java - 返回静态、递归 Java 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27094335/

相关文章:

PHP从列表构建递归数组

java - 确定字符串是否是Java中的整数

java - 通过 Hibernate : org. 使用 MySQL hibernate.exception.SQLGrammarException

java - 用java编写宾果游戏

java - Minmax 算法不返回根的直接子代(返回非法移动)

c# 使用递归打印字符串数组的所有子集

c - 无法找出 C 中递归二进制搜索的问题

java - 乘法数组表

java - JVMTI_ERROR_THREAD_NOT_ALIVE 错误使用多个 Activity 和 OpenWeatherMap API

python - 在 Python 上使用回溯的子集总和