majiang_algorithm

麻将胡牌算法
授权协议 MIT
开发语言 Java
所属分类 神经网络/人工智能、 机器学习/深度学习
软件类型 开源软件
地区 国产
投 递 者 温智明
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

麻将胡牌算法

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://oj.cs203.net/problem.php?id=1270 【题解】: 给定14张麻将牌,规定了‘eyes’,判断能不能和。模拟题。 #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int a[3][20], ans, f[20]; int solve111(i

 相关资料
  • 有一个死胡同,宽度刚好只能让一辆汽车通过,偏偏老有汽车开到死胡同来,这下麻烦了,最先开来的汽车要最后才能倒退出去。给定一个汽车开来的序列和一个可能的倒车出去的序列,请判断汽车能否都倒退出去,若能则输出Yes,否则输出No。 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据首先输入一个正整数n(n≤10),代表开来的汽车数,然后输入2n个整数,其中,前n个整数表示

  • 我一直在试图做一个程序,可以递归地解决一个迷宫(应该适用于任何迷宫)。该算法的大部分递归是有效的,但是当迷宫检查死胡同和重新路由以找到解决方案(终点)的方法时,代码就不起作用了。我已经尝试了多种方法来调试,但它没有让我走远;我要么得到StackOverflowError,要么算法返回一个位置。 注意2D阵列的“字符指示符”: '*' = 墙壁 '#' = 开始 “$” = 结束 ' ' = 可能的

  • COCOS2D-X 单机麻将 项目介绍 基于最新版 Cocos2d-X 3.17 与 cocostudio V3.10 开发的单机麻将游戏,麻将算法为商业级麻将服务器端算法,整个项目代码精简、注释详细。 如果你刚刚接触Cocos2d-X 这绝对是个不错的入门项目 如果是你C++初学者或者其他语言转游戏开发,这项目没有复杂的语法绝对是一个不错的学习项目 如果你是游戏开发从业者想转行棋牌行业,这项目的

  • 小法师的粑粑麻麻是不折不扣的麻瓜,周围圈子中半个魔法师都木有,一度以为小法师毕业后是拼装维修法器的 小法师出生在酱紫的环境,╮( ̄▽ ̄")╭ ,惨不忍睹已经无法形容,可像而知与父母的交流会有多大的障碍 这次一年一度合家团圆的日子,小法师回的非常心不甘情不愿 为什么呢?这又牵扯到两点: 中国式父母 小法师辞职后没再找工作 麻瓜式的粑粑麻麻们,有种深深的自我牺牲精神 即使在如今已全面奔小康的经济大环境

  • 听周总这么说,绝影刷地惊出一身冷汗,脱口而出问道:“谁?”这话刚出口,又自知失语,后悔莫及。 道理是很明显的,既然有人到周总那里告了你的状,周总自然要为这个人保密,一来维护公司的安定团结,二来还指望着这人以后继续为他提供些线索呢。资本家的头脑是和技术工人不一样的,同样的事情,要是放到绝影和BOSSLiu身上,肯定不假思索地答道:“当然是某某某告的你。”而且语气还要放大几十个分贝,以证明对对方的指控

  • 问题内容: 我一直在计划使用simpleXML来满足序列化需求,但是我想尝试使用JSON来学习一些新知识。 这是我用来尝试使用Gson 1.7.1序列化测试POJO的ArrayList的代码。 注意:为了简化代码,我删除了字符串“ s”的读取器/写入器。 这是我得到的输出: 在我的新手看来,这看起来是正确的。仅,反序列化的对象列表包含基本对象,而不是TestObject的I序列化。谁能给我解释一下