Нужно несколько решений судоку

Я пытаюсь output multiple sudoku solutions в моей программе. Например, когда вы вводите это как ввод:

8..6..9.5.............2.31...7318.6.24.....73...........279.1..5...8..36..3......

.Обозначим пробелы. Числа представляют собой уже заполненные пробелы. Вывод должен быть решением судоку, например:

814637925325149687796825314957318462241956873638274591462793158579481236183562749

Тем не менее, я хочу вывести несколько решений. Это будут все решения, которые должны быть напечатаны:

814637925325149687796825314957318462241956873638274591462793158579481236183562749
814637925325941687796825314957318462241569873638472591462793158579184236183256749
834671925125839647796425318957318462241956873368247591682793154579184236413562789
834671925125839647796524318957318462241956873368247591682793154519482736473165289
834671925125839647796524318957318462241965873368247591682793154519482736473156289

Но моя программа выводит только одно решение.
Может ли кто-нибудь помочь мне придумать способ распечатать несколько решений? Благодарю.

0

Решение

Вы не должны возвращаться сюда:

  if(testTheNumber(arr, row, column+1)==true)
{
return true;
}

Вместо этого вы должны позволить алгоритму попробовать все возможные значения k.
И вы должны распечатать решение только в конце (когда вы нашли все числа).

1

Другие решения

Вы можете сделать это, просто не останавливая рекурсию, когда найдете решение. Например, что-то вроде:

if (row == 9) {
// print solution here
return true;
}

и удалить другой return true; и просто рекурсивно

testTheNumber(arr, row, column+1);

Вышеприведенное остановит рекурсию, когда вы найдете решение (достигнув конечной строки), а также продолжит пробовать больше чисел после этой точки.

Кроме того, у вас может быть ошибка в if(k == 10) часть, потому что k никогда не должно быть 10 в этот момент. Вы хотите установить ячейку в 0 после того, как k петля.

1

По вопросам рекламы [email protected]