在Java中递归求解数独字段

在Java中递归求解数独字段,java,recursion,sudoku,Java,Recursion,Sudoku,我想做一个数独游戏 我有一个9by9的多维数组(this.model[9][9]) 我制作了一些函数checkRow、checkCol和checkValue,用于水平、垂直和在9个(较小)框中检查有效性 我创建了一个函数tryValue,用于测试特定单元格中的某个值是否有效(由行I和列j给出): 现在我正试图通过递归来解数独。我尝试过这样做: public static void solve(Field f, int i, int j) throws SolvedException {

我想做一个数独游戏

我有一个9by9的多维数组(
this.model[9][9]

我制作了一些函数
checkRow
checkCol
checkValue
,用于水平、垂直和在9个(较小)框中检查有效性

我创建了一个函数
tryValue
,用于测试特定单元格中的某个值是否有效(由行
I
和列
j
给出):

现在我正试图通过递归来解数独。我尝试过这样做:

public static void solve(Field f, int i, int j) throws SolvedException {
    if (i >= Field.SIZE) {
        // we are done (base case in recursion)
    } else if (j >= Field.SIZE) {
        solve(f, i + 1, 0);
    } else {
        // if empty cell
        if (f.isEmpty(i, j)) {
            // try all values (i.e. values from 1 to 9)
            for (int k=1; k<=9; k++) {
                // if value is valid, insert value
                if (f.tryValue(k, i, j)) {
                    // juhu!
                }
            }
        }

        // continue recursion
        solve(f, i, j + 1);
    }
}

记住,下面的第一个提示是“搜索和研究”。互联网上有很多数独解决方案,Java中也有不少。堆栈溢出有一个很好的选择。为什么所有这些都让你没有任何可行的方法来实施你的下一步?这应该是你的问题重点的一部分。记住,下面的第一个提示是“搜索和研究”。互联网上有很多数独解决方案,Java中也有不少。堆栈溢出有一个很好的选择。为什么所有这些都让你没有任何可行的方法来实施你的下一步?这应该是你的问题焦点的一部分。
public static void solve(Field f, int i, int j) throws SolvedException {
    if (i >= Field.SIZE) {
        // we are done (base case in recursion)
    } else if (j >= Field.SIZE) {
        solve(f, i + 1, 0);
    } else {
        // if empty cell
        if (f.isEmpty(i, j)) {
            // try all values (i.e. values from 1 to 9)
            for (int k=1; k<=9; k++) {
                // if value is valid, insert value
                if (f.tryValue(k, i, j)) {
                    // juhu!
                }
            }
        }

        // continue recursion
        solve(f, i, j + 1);
    }
}
// try all values (i.e. values from 1 to 9)
for (int k=1; k<=9; k++) {
    // if value is valid, insert value
    if (f.tryValue(k, i, j)) {
        ...
while (tryValue(k, i, j)) {
    ...