考虑一个卡片游戏沿着塔纸牌,纸牌,或航道纸牌的线:表包括一些数量的卡,其是立即可用,其中的每一个可能被覆盖的其它卡在其下面的(从正被播放阻断它们) 。你有一个“基础”卡,您可以从表中取出存储卡,如果它正是一个等级高于或低于你的基础卡,此时它成为你的新的基础卡。你有一个有限数量的更换卡从当你无法播放从表一卡画画,所以你一般要玩卡的最长序列可能的。

首先,你将如何代表董事会,以方便找到一个解决办法?其次,你会用什么算法来寻找最长可播放顺序?

示例:

  -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)播放形成在防止您使用的高效“最长路径”算法的曲线图中的周期? (I相信发现在曲线图的最长路径是NP完全如果图形包含周期。)

有帮助吗?

解决方案

如果你代表这是游戏状态的图(与计算的飞行潜在的下一个状态) - 将不会有环路,这意味着它是一个直DFS对游戏的(潜在的状态可能是相当多静止)从起点。

其他提示

在点是构造与节点尽可能少的,其节点将充分捕获问题的状态空间有向非循环图。然后你可以运行你平时的算法。

我建议的编码基础上的剩余的牌的结构中的表中的形状。

的状态下,第一数据可以是最左边的唯一ID - 最上面的卡。 (像图4a例如,它是在一个独特之处在于只存在一个卡4A)。形状的其余部分可以通过用于每个可用的卡描述如果下一个卡到左边是在相同的“等级”,或者它是一个水平的一个-1,0,1(卡已准备好要采取)表示更深或更高。 (这是利用一个卡只重叠2其他卡和该结构看起来你已经在例子中给出的一个的假设)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top