Я занимаюсь разработкой пасьянса для маджонга и пока у меня все хорошо. Тем не мение,
это не так быстро, как хотелось бы, поэтому я прошу дополнительную оптимизацию
техники, о которых вы, ребята, могли бы знать.
Все тайлы известны по макетам, но решения нет. На данный момент у меня мало
правила, гарантирующие безопасное удаление определенных пар одинаковых плиток (которые не могут быть препятствием для возможного решения).
Для ясности плитка свободна, когда ее можно выбрать в любое время, и плитка свободна, когда она вообще не связывает никакие другие плитки.
- Если доступно четыре бесплатных бесплатных тайла, немедленно удалите их.
- Если есть три плитки, которые можно собрать, и хотя бы одна из них - свободная плитка, удалите неплотные.
- Если есть три плитки, которые можно собрать, и только одна свободная плитка (две неудачи), удалите свободную и одну случайную потерю.
- Если доступно три свободных фишки, удалите две из них (не важно, какие из них).
- Поскольку в четыре раза больше одного и того же тайла, если осталось два, удалите их, так как они остались одни.
Мой алгоритм рекурсивно ищет решение в нескольких потоках. Как только ветка закончена (до позиции, в которой больше нет ходов) и она не привела к решению, она помещает позицию в вектор, содержащий плохие. Теперь, каждый раз, когда запускается новая ветка, она будет проходить итерацию по плохим позициям, чтобы проверить, проверена ли уже эта конкретная позиция.
Этот процесс продолжается до тех пор, пока не будет найдено решение или пока не будут проверены все возможные позиции.
Это хорошо работает на макете, который содержит, скажем, 36 или 72 плитки. Но когда есть больше,
этот алгоритм становится практически бесполезным из-за огромного количества позиций для поиска.
Итак, я еще раз спрашиваю вас, есть ли у кого-нибудь из вас хорошие идеи о том, как реализовать больше правил для безопасного удаления плитки или любого другого конкретного ускорения в отношении алгоритма.
С наилучшими пожеланиями,
nhaa123