在Java中递归求解数独字段
我想做一个数独游戏 我有一个9by9的多维数组(在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 {
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)) {
...