Проблема с вашим кодом заключается в том, что он останавливается после того, как находит первое решение - точнее, ваш код никогда не изменит присвоенное значение ячейке, если оно не является неправильным. Это стандартный возврат, который вы реализовали. Что вам нужно сделать, так это то, что как только вы найдете одно решение, вам нужно заставить свой код использовать другие значения и посмотреть, возвращает ли он также действительное решение.
Допустим, это последняя строка вашего судоку (где вам не хватает последнего значения), и ваш счет в настоящее время равен 0 (т.е. пока нет решения):
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 0 |
Ваш код будет пробовать все значения от 1 до 9 для этой последней ячейки, и как только он обнаружит, что 9 является правильным значением, он заполнит его и выполнит рекурсивный вызов.
При рекурсивном вызове ваш код не найдет никаких пустых значений, поэтому он увеличит счетчик на 1 (так что счетчик теперь равен 1) и вернет, в частности, эту строку: return count + 1;
Поскольку вы не делаете никаких дальнейших рекурсивных вызовов в этот момент, увеличенный счетчик будет пропустили рекурсивный стек, и в итоге вы получите значение 1.
Что вам нужно сделать, так это то, что после того, как вы нашли одно решение, вам нужно снова вернуться и принудительно увеличить одно из ценности. Ваша последняя строка в найденном вами решении выглядит так:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Вы не можете увеличить последнюю ячейку, потому что она уже на 9, поэтому вы устанавливаете ее на 0 / EMPTY и go на предыдущее значение. Предыдущее значение - 8, которое может быть увеличено до 9, поэтому вы делаете это, а затем решаете эту доску:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 0 |
Возможно, это не возвращает решение, поэтому вы go верните еще одно ( установка второй последней ячейки на 0 и увеличение предыдущей ячейки:
| 1 | 2 | 3 | 4 | 5 | 6 | 8 | 0 | 0 |
Теперь посмотрим, дает ли это решение. И так далее ...
TL; DR: как только вы найдете решение , вам необходимо передать его обратно в свой код с более жесткими ограничениями (т.е. принудительно увеличить одно из допустимых значений и посмотреть, дает ли оно еще одно решение).