用于解决具有重叠卡的游戏的结构/算法

时间:2010-01-05 03:32:33

标签: algorithm graph solver

考虑沿着Tower Solitaire,Tripeaks或Fairway Solitaire的牌桌游戏:桌子上有一些可立即使用的牌,每张牌都可以覆盖下面的其他牌(阻止他们被玩) 。你有一张“基础”牌,你可以从桌子上取下一张牌,如果它只是你的基础牌之上或之下的一个等级,那么它就成了你的新基础牌。当您无法从牌桌上打牌时,您可以使用有限数量的替换牌进行抽牌,因此您通常希望尽可能打出最长的牌。

首先,您如何代表董事会以便寻找解决方案?第二,你会用什么算法来找到最长的可玩序列?

示例:

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

底部挡卡上方的卡片被移除:在3和2都消失之前,您无法移除4a。假设您的起始牌是王牌,这里的最佳游戏将是2,3,4b,5,4a。 (你可以改用2,3,4a,但那不太好。)

我认为这应该表示为某种有向图。你有3和2到4a以及2和4b到5之间的边缘,但是你还有3到2之间以及4a和5之间的边缘,因为一个可以追逐到另一个之后吗?如果是这样,它们是否可以按任意顺序播放(3然后2,或2然后3)这样的事实会在图形中形成一个循环,阻止您使用有效的“最长路径”算法? (我相信如果图包含周期,在图中找到最长的路径是NP完全的。)

2 个答案:

答案 0 :(得分:2)

如果你将其表示为游戏状态图(具有潜在的下一个状态,可以动态计算) - 这将不会有循环,这意味着它是游戏潜在状态的直接DFS(可能相当多)从起点开始。

答案 1 :(得分:1)

重点是构造一个可能节点最少的有向无环图,其节点将完全捕获问题的状态空间。然后你可以运行你通常的算法。

我建议根据表格中剩余卡片的结构形状进行编码。

州内的第一个数据可能是最左边 - 最顶层卡片的唯一ID。 (例如4a,在某种意义上它是唯一的,只有一张卡4a)。形状的其余部分可以用-1,0,1中的一个表示,每张可用的卡(准备拍摄的卡)描述左边的下一张卡是在同一“级别”还是一级更深或更高。 (这是利用卡片只与其他两张卡重叠的假设,结构看起来就像你在示例中给出的那样)。