В настоящее время я работаю над небольшим моим проектом, кроссвордом Solver.
При вводе 64 символов алгоритм отображает их на доске 8х8, а затем продолжает поиск совпадения любого слова.
До сих пор я написал алгоритм, который для каждого слова просматривает буквы на доске и проверяет, равны ли какие-либо из них первому символу слова. Если это так, я вызываю вспомогательную функцию, которая возвращает всех соседей текущего символа и продолжает проверять, равны ли какие-либо из этих соседей второму символу слова и т. Д. Так что в основном это ширина в ширину Алгоритм поиска, использующий очередь и выдвигающий соседей в эту очередь:)
Пока это работает отлично, однако теперь я понял, что, как только алгоритм соответствует второму символу слова, функция помощника должна возвращать только сосед, который имеет то же направление.
например, если моя доска выглядит следующим образом:
Y A T
C E V
B X S
, и мне нужно найти слово «ДА», алгоритм получает совпадение в [0] [0] и получает все окрестности (в данном случае A, C, E). Затем он проверяет, соответствуют ли какие-либо из них второму символу слова (здесь это E). Но теперь алгоритм должен видеть, что слово следует за диагнозом и возвращает только диагонального соседа (здесь S).
Знаете ли вы какой-нибудь элегантный способ передачи этой информации в функцию помощника без необходимости писать тысячи операторов if?
Для лучшего понимания вот код, который я написал до сих пор:
https://jsfiddle.net/jakob_mayerhofer/84xrfuwL/7/
Конечно, если у вас есть какой-либо другой предложения, как я мог бы написать алгоритм экономнее / эффективнее Я открыт для всех отзывов.
Спасибо за вашу помощь, ценю это:)