关于麻将听牌算法应该怎么写呀

fwoi001 2006-11-05 10:15:30
没什么太特别的 只要能判断出最基本能够听牌的牌型就行

就是最基本的都是由三个相同的(叫刻子么) 和顺子 外加一对 组成的牌 这个算法应该怎么写呢
...全文
785 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2006-12-03
  • 打赏
  • 举报
回复
配成最基本的顺子删是可以的,不过咱们武汉麻将还要考虑赖子,呵呵
Douglax 2006-11-29
  • 打赏
  • 举报
回复
学习中

Greenberet 2006-11-29
  • 打赏
  • 举报
回复
欢迎有对麻将开发有兴趣的朋友加入群: 6557246 大家一起学习交流!
housisong 2006-11-14
  • 打赏
  • 举报
回复
我遇到过有8个精的(白搭、混),南昌麻将,用以前的普通的递归算法(最大复杂度为O(14*14/2))加上精的代换根本处理不过来;

应该使用新的判断算法,这里给一个方法;
先去掉所有的精,“将”(单独的对)可以单独处理,这里只考虑刻或者嗒的情况;判断函数看作求剩下牌能够组成的最小值(一个数学极值问题);比如对于单张牌,函数返回2,对于对或者靠返回1...;
“求剩下牌能够组成的最小值”可以写一个算法求出所有的值,完全遍历所有可能还是比较慢;可以使用很多方法减小搜索分支;用一些数学手段可以很容易证明一些变换对于函数最小值是等价的;搜索过程中可以利用精的个数,当发现函数值已经大于精的个数的时候,就不用再搜索该分支了;等等;

我得到的算法最大复杂度已经小于O(100*14/2)

alfwolf 2006-11-08
  • 打赏
  • 举报
回复
楼上的朋友,那不是联众的程序没有算完,联众的程序算番的方法很巧妙,你遇到的情况只是服务器网络问题导致的.
alfwolf 2006-11-08
  • 打赏
  • 举报
回复
特例很多,十三幺,七星不靠,七对等等
bobob 2006-11-08
  • 打赏
  • 举报
回复
国世无双,7对是特例
onestation 2006-11-08
  • 打赏
  • 举报
回复
知道怎么胡后用所有类型的牌循环算就可以了,总共才几十张牌,不用考虑效率的问题!
onestation 2006-11-08
  • 打赏
  • 举报
回复
我写过这个算法,当时是使用的最原始的方法,先删除杠,再删除一对,然后剩下的都是3个相同或3个连排则胡,当然要考虑特殊情况

//判断是否胡牌
int CMjAI::Hu(VPai & vPai)
{
//vPai手中的所有牌
//返回杠的次数和花色是否相同

//初始化花色类型

//由小到大排序

//删除其中一对,如果剩下的都是3个相同或3个连牌则胡

bool bHu = false;
bool b7Dui = false;
bool b7DuiBig = false;
bool bBigDui = false;

//有几对

//判断胡牌类型,先判断特殊情况
//7小对
//龙对
//大对子

//按3个分组

{


//两种情况


}

int nResult = EHT_NO;

if ( bHu )
{
nResult = EHT_NORMAL;
if ( bSameColor ) nResult |= EHT_SAMECOLOR;
if ( b7Dui ) nResult |= EHT_7DUI;
if ( b7DuiBig ) nResult |= EHT_7DUIBIG;
if ( bBigDui ) nResult |= EHT_BIGDUI;
if ( bAll19 ) nResult |= EHT_ALL19;
if ( bAll258 ) nResult |= EHT_ALL258;
}

return nResult;

}
BurningM 2006-11-08
  • 打赏
  • 举报
回复
是算不出来了,当时3个百搭要算24秒,每打一张要等20多秒,摸到第4个.....就没响应了
不过那时机器烂,现在的机器可能没这个问题
BurningM 2006-11-06
  • 打赏
  • 举报
回复
在联众打麻将有一次摸齐四个百搭,结果程序没了响应......出牌30秒都过了,程序还没算完到底可以胡哪些牌
thisisll 2006-11-06
  • 打赏
  • 举报
回复
http://loserwn.biti.org.cn/blog/read.php/100.htm

摘 要 文章通过一个二维数组定义麻将的数据结构,并在此基础上设计了一种判断麻将是否胡牌的算法,该算法主要步骤的时间复杂度为O (n ),且基本上处于“原地工作”。在经过算法判断运算后,该二维数组最终会恢复到最初的数据。
关键词 麻将;胡牌算法;复杂度
thisisll 2006-11-06
  • 打赏
  • 举报
回复
http://blog.cnool.net/workxu/archive/2006/08/07/136679.aspx

求高手提供麻将胡牌算法(C++)???

引用:
麻将起源于中国,原属皇家和王宫贵族的游戏,其历史可以追溯到三四千年前。在长期的历史演变过程中,麻将逐步从宫廷流传到民间,至清朝中期基本定型。麻将作为中国传统文化宝库中的一个重要组成部分,具有集益智性、趣味性、博弈性于一体的运动魅力,及内涵丰富、底蕴悠久的东方文化特征。几百年来,麻将曾经风行于大江南北,流行范围涉及到社会的各个阶层,已经进入千家万户,而且流传海外,成为我国国内及国外华人中最具规模和影响力的智力体育活动。
先大致介绍一下麻将规则:
各地的麻将有各自的特色,规则上有许多差异。
麻将牌有条子、筒子、万子,分别从1到9各4张。
一条、二条、...九条
一筒、二筒、...九筒
一万、二万、...九万
"东南西北中发白"字牌各4张
还有花牌"春夏秋冬梅兰竹菊"各1张
共计144张牌。

...
BurningM 2006-11-06
  • 打赏
  • 举报
回复
用正则表达式^_^
MFC2006 2006-11-05
  • 打赏
  • 举报
回复
给你个思路:

这个应该用递归做。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧