麻将胡牌算法思路(任意赖子)

看网上算法穷举,枚举,剔除特殊情况等等很乱,感觉还是写一套通用的逻辑比较好。

这个算法前后修改了几次,最终在三星s4这种老的安卓机上计算一次时间在0.04s左右。

总体思路:首先需要一对将牌,剩下的牌任意组合,都组成顺子或者坎牌就可以胡牌了。

发完牌,手牌13张,要胡牌的话是14张,我们插入一张赖子牌。

每张牌都可能做为将牌,就算只有一张,还有一张赖子牌可以组成将牌,我们先遍历麻将牌列表,每张牌(非赖子)都做将牌算一次,把将牌拿出去,剩下的再任意组合,看是否能组成顺子或者坎牌。

我是用了递归,组成了三张就把组成的三张牌拿掉,剩下的牌继续递归,直到所有牌都组完,中间如果不能组成顺子或者坎牌,我们需要拿赖子牌补上,同时记录了我们补的牌是什么,最终判断手里的赖子牌等于我们补牌需要的赖子牌数,那么说明可以胡牌,返回可以胡和可以胡的牌,如果是小于则是任意胡。

 

你可能感兴趣的:(cocos,lua)