我正在寻找一种算法,以确定当前的麻将手牌是否是一种获胜的手牌。如果您不熟悉这个游戏,这是基本思想(简化版):
- 有三种花色的牌,每种花色都包含1-9的牌。还有特殊牌,共七种类型。每张牌都有四张复制品,因此每种花色有36张牌,特殊牌有28张。 - 手中有14张牌。 - “吃”是由同一花色的三张连续牌组成的一副牌。 - “碰”是由三张相同的牌组成的一副牌。 - “杠”是由四张相同的牌组成的一副牌。 - “对子”是由两张相同的牌组成的一副牌。 - 获胜的手牌是由任意数量的“吃”、“碰”和/或“杠”以及一个“对子”组成的。
手牌按花色和点数排序。我的想法是这样的:
- 将所有牌标记为未访问和非获胜状态。 - 访问第一张未访问的牌。 - 检查后续牌,直到遇到“吃”、“碰”或“杠”,或者没有可能性为止。如果完成了组合,则将所有参与的牌标记为已访问和获胜。 - 如果所有牌都被访问了,请检查它们是否都是获胜的。如果没有访问所有牌,则返回步骤2。 问题在于,一旦一张牌成为组合的一部分,它就不能成为任何其他可能使手牌获胜的组合的成员。
有关可行算法的任何想法?
- 有三种花色的牌,每种花色都包含1-9的牌。还有特殊牌,共七种类型。每张牌都有四张复制品,因此每种花色有36张牌,特殊牌有28张。 - 手中有14张牌。 - “吃”是由同一花色的三张连续牌组成的一副牌。 - “碰”是由三张相同的牌组成的一副牌。 - “杠”是由四张相同的牌组成的一副牌。 - “对子”是由两张相同的牌组成的一副牌。 - 获胜的手牌是由任意数量的“吃”、“碰”和/或“杠”以及一个“对子”组成的。
手牌按花色和点数排序。我的想法是这样的:
- 将所有牌标记为未访问和非获胜状态。 - 访问第一张未访问的牌。 - 检查后续牌,直到遇到“吃”、“碰”或“杠”,或者没有可能性为止。如果完成了组合,则将所有参与的牌标记为已访问和获胜。 - 如果所有牌都被访问了,请检查它们是否都是获胜的。如果没有访问所有牌,则返回步骤2。 问题在于,一旦一张牌成为组合的一部分,它就不能成为任何其他可能使手牌获胜的组合的成员。
有关可行算法的任何想法?