内容简介:麻将胡牌算法 majiang_algorithm是带多张鬼牌的通用胡牌算法,采用查表方式,简单高效。 表生成 在生成表的阶段,时间是不值钱的,所以生成方法我们可以任意穷举。 首先分为普通、风、箭三张表。 穷举出所有的key...
麻将胡牌算法
majiang_algorithm是带多张鬼牌的通用胡牌算法,采用查表方式,简单高效。
表生成
在生成表的阶段,时间是不值钱的,所以生成方法我们可以任意穷举。
首先分为普通、风、箭三张表。
穷举出所有的key,比如普通表,就是000000000-444420000,因为每一种牌最大4张,且总和不超过14张牌。
对于每个key,生成这个key在不同鬼的情况下的胡牌信息列表。
胡牌信息列表的内容是,在N张鬼的情况下,这个key胡什么牌,并且是否有将。
例如1万2万5万5万:110020000,生成的胡牌信息有。
1万2万5万5万:鬼0 有将 胡3万(0个鬼的时候,这个牌胡3万,此时有将)
1万2万5万5万:鬼1 无将 胡3万胡5万(1个鬼的时候,这个牌胡3万5万,此时无将)
1万2万5万5万:鬼1 有将 胡了(1个鬼的时候,这个牌已经胡了(鬼变成3万),此时有将)
1万2万5万5万:等等...
胡牌算法
有了前面辛苦生成的表格,那么判断胡牌算法就很简单了。对玩家手上的牌进行编码,变成多个key和鬼牌总数。N,例如手牌如下
得到key:110020000、020000000和鬼牌总数2。
对每个key查询表,得到对应的胡牌信息列表。
针对每组列表,过滤掉鬼牌总数>N的项以及没有胡的项,上面的例子就会有。
1万2万5万5万:鬼1 有将 胡了
2筒2筒:鬼1 无将 胡
简单递归下,看看几组胡牌信息列表里,是否满足鬼牌总数和只有一个将的约束。
如果有任意组合满足,则胡了,在上面的例子里,恰好满足条件,于是胡了。
总耗时:查表耗时*M + 递归M层分配鬼和将的耗时M是花色数目,M<=5。
查胡算法
与胡牌算法类似,根据key查出胡牌信息列表。
简单递归下,找出满足鬼的总数和只有一个将的约束时,所有不能胡的胡牌信息里可胡牌的集合,就是这手牌能胡什么牌。
【声明】文章转载自:开源中国社区 [http://www.oschina.net]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- CAT 0.4.0 版本发布,新增 DH 密钥交换算法与对应的加密与解密算法
- CAT 0.3.0 版本发布,新增签名与验签功能、DSA 算法和梅森旋转算法
- HQChart 1.9444 版本发布, 优化绘图算法
- Zstandard 1.4.4 发布,无损数据压缩算法
- Inferno 7.1.1 发布,优化 LIS 算法性能
- 开源!《AI 算法工程师手册》中文教程正式发布!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。