前几天刚好有项目需要胡牌算法查阅资料后,大部分胡牌算法的博客都是只讲原理实现太过简单,且没有给出测试用例然后就有了下面的这个胡牌算法,我将从算法原理和算法实现两部分展开想直接用的,直接跳到算法部分即可
这里麻将是108张牌,也就是只带万条,筒数据结构可抽象为两种形式
下面将给絀牌值的数据结构
下面是牌对象的数据结构
每个人搬牌后,手中的牌必是14张(或8张)胡牌时需满足以下条件
将牌
(两张一样的牌)
刻子
(三张相同的牌)或顺子
(三张连续的牌)
所以胡牌的数学模型可被抽象成以下公式:
搞清楚如何能够胡牌之后,下面谈一下判断胡牌的流程
将牌
得到所有去除所有将牌之后得到的数组集(去除两张相同牌得到的不同组合)
3n
的格式(顺子或刻子
),不滿足直接false
3n
的格式(顺子或刻子
),继续检查所有断点内容是否符合胡牌规则(下面代码中有详述)
不想看的直接复制(复制可直接运行)!!!
去除将牌返回所有可能的情况
断点后,检查所断的牌型是不是顺子或者刻子
根据拆解位检测最终是否能胡
大概用了两天的時间完成的感觉搞清流程和原理之后,再按着步骤去做就很简单了。只是原来写习惯java了用node.js实现时要格外注意内存泄露的问题。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。