请教关于麻将的听牌算法(语言不限,欢迎讨论)

2014-08-07 17:27:46 +08:00
 bufannao
简单一些,牌型假设不考虑花色,只包括条、筒、万
正常手中是13张牌,当再摸一张牌后如何判断是否可以听牌(此时手中是14张牌,需要再打出去一张判断是否能够听牌)?(杠也不可以不考虑)
胡牌规则不考虑七对子、清一色、大三元、幺、九等等特殊规则,只要简单包括1将牌、1-N刻牌、1-N顺牌即可。
深知关于这类的算法应该都是商业化的,希望有过研究的不吝赐教。
8079 次点击
所在节点    问与答
25 条回复
Sunyanzi
2014-08-07 22:53:44 +08:00
@bufannao 我自己看了一遍也发现问题了 orz ... 是四百六十二次 ... 不是一千多次 ...

对比牌型是指确认手上的牌是否和了 ... 穷举的过程是这样 ...

第一次先确认起手牌是不是和了 ... 没和的话从十四个位置的每一个位置把所有牌穷举一遍 ...

如果可以通过替换某一张牌为另一张牌和牌的话 ... 说明打掉那张牌就可以上听 ...

总穷举次数为 ( 34 - 1 ) * 14 ... 麻将牌总共三十四种牌 ... 手上有十四张 ... 减一是减掉起始那张 ...
bufannao
2014-08-07 23:15:17 +08:00
@Sunyanzi 谢谢,懂了!另外之前说的『如果存在 6M 的话检查是否存在听牌标记 ... 』是否应该是『如果存在 5M 但不存在 6M 的话检查是否存在听牌标记 ... 』
Sunyanzi
2014-08-07 23:43:21 +08:00
@bufannao 那个情况是如果存在 4M 不存在 5M 但存在 6M 的话 ... 检查听牌标记 ...

4M 6M 是听牌 ... 若之后的牌被完整跳过且将牌标记出现一次说明这个牌和单张 5M ...

另外的情况是得到超过一个将牌标记或者中途中止 ... 这都是未听牌 ...

至于 5M 6M 的话 ... 那就等于 4M 5M 的情况了 ... 我在上面有详述 ...
zhujinliang
2014-08-08 00:06:03 +08:00
先完成和牌算法: 先尝试分成4个组及一个雀头的形式,如不能成立,则为不和了,此步骤可过滤大部分情况。之后可能有多种分法,需对每种分法套用排型比较,依次统计得点,取得点最高的分法

实现和牌算法后,穷举每个牌,作为自摸牌,如果可和,则为听牌
aheadlead
2014-08-09 12:44:43 +08:00
空听立直什么的....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/126619

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX