Я понимаю, что время этого вопроса пришло и ушло, но так как я сам работал над решателем и наткнулся на него, пока гуглял, я подумал, что должен опубликовать ссылку на свою, так как она кажется немного отличающейся от некоторых др.
Я решил использовать плоский массив для игрового поля и делать рекурсивные поиски для каждой буквы на доске, переходя от действительного соседа к действительному соседу, расширяя поиск, если текущий список букв, если действительный префикс в индекс. При прохождении понятия текущего слова используется список индексов на доске, а не буквы, составляющие слово. При проверке индекса индексы переводятся в буквы и проверка завершается.
Индекс - это словарь грубой силы, который немного похож на три, но допускает Pythonic-запросы к индексу. Если в списке есть слова «кошка» и «кошка», вы получите в словаре следующее:
d = { 'c': ['cat','cater'],
'ca': ['cat','cater'],
'cat': ['cat','cater'],
'cate': ['cater'],
'cater': ['cater'],
}
Таким образом, если current_word равен 'ca', вы знаете, что это действительный префикс, потому что 'ca' in d
возвращает True (поэтому продолжайте обход доски). И если current_word равен 'cat', то вы знаете, что это правильное слово, потому что оно является действительным префиксом и 'cat' in d['cat']
также возвращает True.
Если это так, допускается некоторый читаемый код, который не кажется слишком медленным. Как и все остальные, затраты в этой системе на чтение / построение индекса. Решение доски довольно много шума.
Код: http://gist.github.com/268079. Он намеренно вертикальный и наивный с множеством явных проверок достоверности, потому что я хотел понять проблему, не выдавая ее за кучу магии или неизвестности.