Структура/алгоритм для решения игры с перекрывающимися картами

Рассмотрите карточную игру вроде Пасьянса Башни, Tripeaks или Пасьянса Фарватера: таблица состоит из некоторого количества карт, которые сразу доступны, каждый из которых мог бы покрывать другие карты под ним (блокирование их от того, чтобы быть играемым). У Вас есть одна карта "основы", и можно удалить карту из таблицы, если это - точно один разряд выше или ниже карты основы, в которой точке это становится новой картой основы. У Вас есть ограниченное количество новых плат для рисования из того, когда Вы не можете разыграть карту от таблицы, таким образом, Вы обычно хотите играть самую длинную последовательность возможных карт.

Во-первых, как Вы представили бы плату для упрощения нахождения решения? Во-вторых, какой алгоритм Вы использовали бы для нахождения самой длинной играемой последовательности?

Пример:

  -4a- -5-
-3-  -2- -4b-

Карты на картах нижнего слоя камня на вершине от того, чтобы быть удаленным: Вы не можете удалить 4a, пока и 3 и 2 не не стали. Принятие Вашей стартовой карты является тузом, оптимальная игра здесь была бы 2, 3, 4b, 5, 4a. (Вы могли играть 2, 3, 4a вместо этого, но это не так хорошо.)

Я предполагаю, что это должно быть представлено как некоторый ориентированный граф. У Вас были бы края от 3 и 2 к 4a и от 2 и 4b к 5, но у Вас также будут края между 3 и 2 и между 4a и 5, так как каждый играем после другого? Если так, был бы то, что они могут играться или в порядке (3 затем 2, или 2 затем 3) формируют цикл в графике, который препятствует тому, чтобы Вы использовали эффективный "самый длинный путь" алгоритмы? (Я верю нахождению, что самый длинный путь в графике полон NP, если график содержит циклы.)

7
задан animuson 2 October 2012 в 03:04
поделиться

2 ответа

Что, если представить это как график игровых состояний (с вычислением следующих потенциальных состояний на лету) - которые не будут иметь циклов, то есть это прямая DFS по потенциальным состояниям игры (которых может быть еще достаточно много) с начальной точки.

.
2
ответ дан 7 December 2019 в 16:42
поделиться
[

] The point is to construct a direct acyclic graph with the littleest nodes possible, whose nodes would full capture the state space of the problem. Затем можно запустить обычный алгоритм.[

] [

]Я предлагаю кодировку, основанную на форме структуры оставшихся карточек в таблице.[

] [

]Первыми данными в состоянии могут быть уникальные ID самой левой - самой верхней карточки. (как, например, 4а, уникальна в том смысле, что есть только одна карта 4а). Остальная часть формы может быть представлена одной из -1,0,1 для каждой доступной карты (карта, которая готова к взятию) с описанием того, находится ли следующая карта слева на том же "уровне" или на один уровень глубже или выше. (При этом используется предположение, что карта перекрывает только 2 другие карты и что структура выглядит так же, как в примере)[

].
1
ответ дан 7 December 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: