C++数据结构与算法——麻将胡牌算法(二:完全胡牌算法)

本文详细介绍了如何实现一个完整的麻将胡牌算法,包括多花色情况的处理。胡牌规则要求东南西北中发只能成对出现,且牌可以有多种花色。通过拆分将牌并应用单花色胡牌规则来判断剩余牌是否合法。核心代码包含关键函数`judgeLeft`的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然单花色胡牌算法面试时写出来了,但是完整的胡牌算法却没有写,既然遇到了,秉着不抛弃不放弃的精神,当然不能原谅懒惰的自己了。下面这篇为一个完整的胡牌算法。

胡牌规则除了以下几点,其余与单花色胡牌规则一致:
1.东南西北中发,只能三个相同的牌才能进行组合,不允许与不同的牌进行组合
2.牌的花色可能有多种

分析:
这里由于涉及到多花色的情况,我们可以将它当作是单花色的一个扩展。即,只要从牌中取出一对将牌后,将剩余的牌按照花色分别判断是否符合规则即可。其中judgeLeft函数为单花色中使用的函数。代码如下:

enum eHuaseType
{
    EN_WANZI = 0,   // 万字
    EN_TIAOZI,      // 条字
    EN_BINGZI,      // 饼字
    EN_FENG,        // 风
    EN_HUASE_COUNT  // 花色的种类数
};

#define MAX_LENGTH_OF_HUASE (10)// 多申请一些内存,方便取值


// 假定牌对应的数字如下:1~9为万字,11~19为条字,21~29为饼字,31~37为东南西北中发白
bool judgeLeftHuase(<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值