Для игры по построению слов, над которой я работаю, у меня есть тройка, в которой хранятся все возможные слова из словаря. На данный момент это около 179 000 человек.
Как работает игра, есть 5x5 (или, возможно, больше в будущем, в зависимости от того, насколько эффективным окажется решение этого вопроса) сетка букв. Игрок и ПК по очереди составляют слова из этих букв, получая очки в зависимости от букв и длины слов (оценка букв аналогична Scrabble, но это не важно). Всякий раз, когда игрок составляет слово, эти буквы удаляются с доски, и это продолжается до тех пор, пока не останется слов, после чего сетка сбрасывается (и победитель раунда получает бонус).
Вопрос в следующем: учитывая сетку букв 5x5 и этот словарь, как я могу эффективно определить либо самое длинное слово, которое можно составить, либо список всех возможных слов? Обратите внимание, что буквы не обязательно должны соприкасаться друг с другом, чтобы их можно было использовать; любая из букв сетки в порядке.
Единственный способ, который я могу придумать, - это, по сути, сделать BFS на дереве, обрезав его, когда следующая буква не находится в сетке, но мне это не кажется очень эффективным, поскольку это нужно было бы попробовать для каждой буквы в сетке. Есть лучший способ сделать это?