四面子一将
把手牌拆成四组面子加一组将对。关键在于将牌不唯一时必须逐张尝试,不能先固定再看是否成立。
四面子一将、七对、碰碰胡、清一色搭牌,这些牌型在同一手牌里常常交叉成立。这里把每一种牌型的判定条件、拆解顺序、回溯剪枝与边界情况逐条写下来,配上对应牌例,对局结算和规则引擎都能直接对照使用。
最容易出错的地方不在牌型本身,而在将牌固定得太早、顺子刻子拆法没穷举,导致明明能胡被判成不能胡。
牌型判定是整份九江麻将算法列表里被引用最多的一类内容,下面这些数字反映当前已整理的判据、牌例与边界用例数量。
同一手牌往往同时满足多条判据,整理时按拆解方式分开写,避免在实现阶段反复猜测优先级。
把手牌拆成四组面子加一组将对。关键在于将牌不唯一时必须逐张尝试,不能先固定再看是否成立。
按牌面计数判断成对数量,遇到四张同牌要区分两种算法:算两对,还是按玩法规定不算对子。这条判据直接影响结论。
四组面子全部为刻子或杠时成立。实现上可以在拆解通过后回看面子类型,也可以直接限定只走刻子分支。
先按花色分桶,若只有一种花色的牌数不为零即进入清一色分支,再按常规面子判据继续拆解。
十三张手牌依次加试三十四种牌面,每次加入后调用一次胡牌校验,通过即为听口,重复结果按牌面去重。
以最小换张次数为目标做逐层搜索,遇到牌型已成立直接返回负一听,用于提示与自动理牌时的排序参考。
同一副牌,写法不同会让判定结果一致但耗时相差数十倍。以下是把两种实现放在一起核对后的记录。
| 对照项 | 朴素递归 | 记忆化枚举 |
|---|---|---|
| 重复牌面 | 反复展开相同分支 | 状态缓存后直接复用 |
| 将牌选择 | 先固定再判定,易误判 | 全量尝试后合并结果 |
| 明牌处理 | 混入手牌一起回溯 | 单独计数,减少搜索深度 |
| 单次校验耗时 | 随牌型复杂度明显上升 | 稳定在毫秒级以内 |
| 多解牌型 | 只返回第一种拆法 | 返回全部可行拆法 |
记忆化不等于跳过校验,而是把「剩余牌面→是否可拆完」的结果缓存起来。多解牌型仍会完整枚举,只是不再重复计算同一中间状态。
牌型判定条目的整理和代码落地通常是同步推进的,每个阶段解决的问题不一样。
先让四面子一将的判定成立,用计数数组加简单回溯,能覆盖大部分普通牌型。
加入七对、碰碰胡、清一色的独立判据,并明确它们与基本胡的叠加与互斥关系。
将牌逐张尝试,碰杠明牌单独计数,同一手牌的多种拆法全部保留,供算番环节使用。
引入状态缓存与剪枝,把边界用例写成固定测试集,新增玩法时只需扩展分支。
新整理的牌型分支、判据修正与边界用例会先出现在这里,随后并入对应的条目正文。
hupai algorithm 相关说明(第1部分)。hupai algorithm 相关说明(第2部分)。hupai algorithm 相关说明(第3部分)。hupai algorithm 相关说明(第4部分)。hupai algorithm 相关说明(第5部分)。hupai algorithm 相关说明(第...
hupai algorithm 相关说明(第1部分)。hupai algorithm 相关说明(第2部分)。hupai algorithm 相关说明(第3部分)。hupai algorithm 相关说明(第4部分)。hupai algorithm 相关说明(第5部分)。hupai algorithm 相关说明(第...
hupai algorithm 相关说明(第1部分)。hupai algorithm 相关说明(第2部分)。hupai algorithm 相关说明(第3部分)。hupai algorithm 相关说明(第4部分)。hupai algorithm 相关说明(第5部分)。hupai algorithm 相关说明(第...
hupai algorithm 相关说明(第1部分)。hupai algorithm 相关说明(第2部分)。hupai algorithm 相关说明(第3部分)。hupai algorithm 相关说明(第4部分)。hupai algorithm 相关说明(第5部分)。hupai algorithm 相关说明(第...
hupai algorithm 相关说明(第1部分)。hupai algorithm 相关说明(第2部分)。hupai algorithm 相关说明(第3部分)。hupai algorithm 相关说明(第4部分)。hupai algorithm 相关说明(第5部分)。hupai algorithm 相关说明(第...
hupai algorithm 相关说明(第1部分)。hupai algorithm 相关说明(第2部分)。hupai algorithm 相关说明(第3部分)。hupai algorithm 相关说明(第4部分)。hupai algorithm 相关说明(第5部分)。hupai algorithm 相关说明(第...
牌型判定直接决定结算结果,条目写清楚只是第一步,能被人反复核对才算完成。
每条牌型给出的成立条件都能用一副具体手牌验证,不含模糊表述。
条目附带十四张示例牌面,照着摆出来就能看到拆解路径与最终结论。
伪代码不绑定语言,编码、定将、回溯、校验四步换成任意语言都能照抄结构。
多解拆法、将牌冲突、明牌夹带等容易漏判的情形单独归档为测试用例。
这三类问题在牌型判定里出现频率最高,排查时可以先从这里入手。
有些牌面同时存在两组可作将的牌,先定其中一组会让后续面子拆不完。正确做法是逐张尝试,全部失败才算不能胡。
万、筒、条三色的数字虽然相同,但不能互相组成顺子。按花色分桶后再拆,是避免此类误判最直接的方式。
已经亮出的面子不计入手中牌,只需按已定面子数量减少目标组数。混在一起回溯会凭空多出若干无效分支。
以下回答均以条目正文中的判据为准,遇到地方玩法差异时会单独标注。
地方玩法一改,牌型判定跟着要改。把新增分支、判据修正与边界用例的通知发给你,省去反复翻旧记录的时间。