注意:这个问题已经解决了,实际问题不在这个方法上,而是在另一个方法上,所以如果你在搜索数独的东西,最后进入这个页面,你绝对可以使用我下面的方法,它有效。
好吧,忘记所有用于解决数独的复杂算法。我正在用 Java 编写一个简单的求解器来解决简单的数独游戏。这种方法的思路很普遍,所以我想大家都已经知道了。我也很惊讶我无法完成它。
方法是遍历板上的每个单元格,并填写所有只有一种可能性的单元格。重复直到每个单元格都被填满。很简单,下面是我的代码,return int 可以做填充数:
public int solveGame() {
/*
variable possible contains 10 elements, the first element is true if there
is one or more possible value to fill in, false otherwise. The remaining
elements (1-9) are whether true or false depending on their indexes
e.g. possible[3] is true if 3 is a possibility.
*/
boolean[] possible;
int[] save;
int count;
int numresolve = 0;
while (!isFinished()) {
for (int i = 0; i < GAMESIZE; i++) {
for (int j = 0; j < GAMESIZE; j++) {
possible = new boolean[10];
possible = getPossible(i,j);
if (possible[0]) {
count = 0;
save = new int[9];
for (int k = 1; k < 10; k++) {
if (possible[k]) {
count++;
save[count] = k;
}
}
if (count == 1) {
setCell(i,j,save[count]);
numresolve++;
}
}
}
}
}
return numresolve;
}
我的代码的问题是它永远无法完成循环,因为在填充了所有有 1 种可能性的单元格后,剩余的单元格将有超过 1 种可能性,这是不可能完成循环的。
我知道我错过了一些我想不到的东西。