Прежде всего, извините за мой английский.
Я бы хотел использовать алгоритм возврата в Erlang. Это послужило бы догадкой для решения частично заполненного судоку. Судоку 9x9 хранится в виде списка из 81 элемента, где каждый элемент хранит возможное число, которое может попасть в эту ячейку.
Для судоку 4х4 мое первоначальное решение выглядит так:
[[1], [3], [2], [4], [4], [2], [3], [1], [2,3], [4], [1], [2, 3], [2,3], [1], [4], [2,3]]
У этого судоку есть 2 решения. Я должен выписать их обоих. После того, как это первоначальное решение достигнуто, мне нужно реализовать алгоритм обратного отслеживания, но я не знаю, как это сделать.
Моя мысль состоит в том, чтобы записать фиксированные элементы в новый список с именем fixedlist, который изменит ячейки с несколькими решениями на [].
Для приведенного выше примера исправление выглядит следующим образом:
[[1], [3], [2], [4], [4], [2], [3], [1], [], [4], [1], [], [], [1], [4], []]
Отсюда у меня есть «образец», я ищу наименьшую длину в списке решений, которая не равна 1, и я пробую первое возможное число этой ячейки и помещаю его в этот фиксированный список. Здесь у меня есть алгоритм для обновления ячеек и проверки, если это все еще разрешимая судоку или нет. Если нет, я не знаю, как сделать шаг назад и попробовать новый.
Я знаю его псевдокод и могу использовать его для обязательных языков, но не для эрланга. (пролог фактически реализовал алгоритм возврата, но эрланг этого не сделал)
Есть идеи?