Примечание: эта проблема была решена, проблема не в этом методе, а в другом, поэтому, если вы ищете что-то о судоку и, наконец, попадаете на эту страницу, вы можете абсолютно использоватьМой метод ниже, он работает.
Хорошо, забудьте обо всех сложных алгоритмах, используемых для решения судоку.Я пишу простой решатель на Java для решения простых игр судоку.Идея этого метода очень распространена, поэтому я думаю, что все уже знают это.Я также удивлен, что не могу сделать это.
Метод состоит в том, чтобы пройти каждую ячейку на доске и заполнить все ячейки, которые имеют только 1 возможность.Повторяйте, пока каждая клетка не заполнится.Очень просто, и вот мой код, можно вернуть 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 возможности, что невозможно для завершения цикла.
Я знаю, что мне не хватает того, о чем я не могу думать.