mahjong - 麻将验胡算法


GPL
跨平台
C/C++

软件简介

1.基础的查表法

每种牌编一个id,麻将中共34种牌(编号从0-33)因此需要至少6位空间。手牌14张也就是146=84位。要保存和牌的全部组合约1700万种需要约841700*10000=175MB存储。

显然这种方式需要的内存太大,不适合应用。

2.改进的思路如下:

为了判断手牌是否胡牌,牌本身是1万,4万等等都不重要。只要知道像123一样的数字是否连续,只要有某牌个数就足够了。因此,首先对手牌进行分组,规则为将连续的牌分成一组(1万,2万,3万,5万,6万,7万就可分为两组「123」,「567」),将每个分组以个数的形式来表示,可以减少组合的数量。具体的例子如下:

「123」→「111」
「567」→「111」
「111」→「3」
「333」→「3」
「234456」→「11211」

为了完整的表示手牌,可以将不相连的分组中间用0相连,这样就可以将多个不相连的分组用一串数字进行表示了,如以上的例子,两个分组「123」,「567」就可以表示为「1110111」;

无混验和参考文档:http://hp.vector.co.jp/authors/VA046927/mjscore/mjalgorism.html