找到一个感觉很不错的,过来分享下。
原文地址:http://blog.csdn.net/yuanfengyun/article/details/73658299
核心思想:
1、名词解释:eye(将),字牌(feng、东南西北中发白),花色(万、筒、条、字牌)
2、分而治之:检查手牌是否能胡是依次检查万、筒、条、字牌四种花色是否能组成胡牌的一部分。
3、单一花色要能满足胡牌的部分,则要么是3n(不带将),要么是3n+2(带将)。3n中的3带表三张牌一样的刻子,或三张连续的牌如1筒2筒3筒。
4、判断是否满足胡牌的单一花色部分,需要根据是否有将,有几个赖子,查询不同的表。表内容表示表里的元素加上对应的赖子数量能组成3n 或3n+2。
赖子数是表名最后的数字,带有eye的表表示满足3n+2,没有的表示满足3*n。
5、查表的key值,是直接根据1-9有几张牌就填几(赖子不算),如1-9万各一张,则key为111111111。如1万3张,9万2张,则key为300000002。
6、组合多种花色,判断是否能胡牌。将赖子分配给不同的花色,有若干种分配方式,只要有一种分配能让所有花色满足单一花色胡牌部分,则手牌能胡。
如:手上有3个赖子,可以分配万、筒、条各一张,也可以万、同、字牌各一张
7、根据是否有将、是否字牌分为4种表,每种表又根据赖子个数0-8分别建表,共36张表
还有很多,具体的看原文。