社区
C++ 语言
帖子详情
求助:麻将胡牌判断算法
rbcic
2005-08-31 12:04:05
RT....
赖子麻将(也就是其中有种牌是可以当任何张牌用的),14张麻将牌判断是否可以胡牌的算法.
想了很久都没办法解决赖子可以随便当牌的问题..因为可能同时存在四张赖子的情况..完全没有任何头绪..请大家帮忙想一下有什么好的解决方法..先谢谢了...
...全文
3339
47
打赏
收藏
求助:麻将胡牌判断算法
RT.... 赖子麻将(也就是其中有种牌是可以当任何张牌用的),14张麻将牌判断是否可以胡牌的算法. 想了很久都没办法解决赖子可以随便当牌的问题..因为可能同时存在四张赖子的情况..完全没有任何头绪..请大家帮忙想一下有什么好的解决方法..先谢谢了...
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
47 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rbcic
2005-09-12
打赏
举报
回复
是用错误的牌去执行函数的..也就是最差的情况...
我就是用做服务器程序..汗颜..
先结贴..谢谢大家了
rbcic
2005-09-12
打赏
举报
回复
怎么测试速度的???
我用for循环执行判断函数100万次,
在循环前有time()函数取得时间
然后循环后再取一次,
显示两次时间间隔是5秒...
xiajia
2005-09-11
打赏
举报
回复
当然如果是算胡牌的话应该可以更快,因为一旦超出癞子的数目就可以不用继续了,直接返回,而且,可以尽量利用现有的连牌,而且只要找到一个相等的就可以结束递归了,可以想象比我的那个速度要快上很多才对呀!哈哈
xiajia
2005-09-11
打赏
举报
回复
嗯,好久没有过来了,恩,其实我提个小建议,这个……其实只要找一个最小缺张的胡牌方案,然后比较癞子和缺张的数目就好了!当然这只是个人建议,因为我现在做的程序,这一部分是比作的,所以不会影响到性能,但是如果不是就会很慢,所以只是提个建议而已!
至于寻找最小缺张虎牌方案,可以用递归做,我这里算10幅牌只要1秒,好像还以有点慢!不过程序还在优化中!如果有更好的方案谢谢,指教!
rbcic
2005-09-09
打赏
举报
回复
自己解决了..没有用树的搜索算法(汗~~~数据结构没学好)...
方法是把手中14张牌分成 万,饼,条,东南西北,中发白,五种牌型的值存到五个数组中,
然后对每个数组进行判定,首先判断一顺的数目(如果是一顺的话就把其值置为-1,后面一样,只要判断过了就置-1),然后再判断一碰的数目,然后是一对的数目,再就是两张(可以由会牌组成一顺的两张)的数目最后剩下的就是单张的数目.这样把五个数组都判断一次.然后变换判断次序(字牌没有一顺是不需要的),具体我只考虑了四种
1.一顺->一碰->一对->两张->单张
2.一碰->一顺->一对->两张->单张
3.一顺->一碰->两张->一对->单张
4.一碰->一顺->两张->一对->单张
然后用个双层FOR循环判断所有的判断次序的组合是不是可以胡牌...
自己测试了几十次没什么问题..但是这种方法肯定应该是有遗漏的..但是现在时间紧就先这样解决了..自己回去闭们复习数据结构..
killer1984
2005-09-09
打赏
举报
回复
这样处理也不是不可以,不过代码没个千把行估计是不行的。。。
而且效率上肯定是有损失的,但愿你不是做在服务器上运行。。。
paul422
2005-09-06
打赏
举报
回复
大家好!我有个问题要请大家帮忙!我是学计算机的,不过我不大喜欢那些语言。到是对电路很赶兴趣,学的也不错。这两天我要面试,他们肯定回问到语言上的问题。请帮忙下
jiangbo1125
2005-09-06
打赏
举报
回复
搞好后可以直接编个麻将游戏了。
rbcic
2005-09-06
打赏
举报
回复
自己顶一下...其实我要做的胡牌规则挺简单的..只有平胡一种...但是还有两个特殊的规定:手上必须有一张1或者9(但是如果有字牌的时候可免,癞子可以当1,9或者字牌),手上必须有一碰(但是手上有中,发,白的时候可免,癞子可以当一碰或者当中,发,白),手上必须有一顺(癞子可当)...
现在在考虑killer1984(人在天涯)的想法..如果没有癞子的情况很简单..但是有了就发现很困难....郁闷了
copygirl
2005-09-06
打赏
举报
回复
mark,研究一下
laomai
2005-09-06
打赏
举报
回复
to xiajia(贾胜华)
我给你发了一个短消息,望查收
killer1984
2005-09-06
打赏
举报
回复
to rbcic():
你说的那几个规则可以搜索前先判断,也可以搜索中加入标志参数,返回true前对标志进行判断,建议采用后者,实现比较简单。
下面给你几点实现上的建议(都是自己的想法,没有看过别人这方面的代码,如果有高手有更好的方法,欢迎指正):
递归函数采用如下参数:序列头指针、序列尾指针、癞子牌数(序列中不包括癞子)和一个32位标志,标志包含:是否已经有将牌、手上是否有一张1或者9,手上是否有一碰,手上是否有一顺(标志可扩展)。
对牌的表示,饼、索、万都用连续整数表示,但相互之间间隔两个整数,以简化判断,其它牌型根据具体情况采用离散的整数。
另外就是算法优化上的问题了,主要技术是足够好的剪枝,因为这个搜索的特殊性,剪枝主要通过对各项判断的排序完成,具体怎么拍就要做实验了。。。
xiajia
2005-09-02
打赏
举报
回复
这是bug???应该不是什么算法吧!!
hawkyoo
2005-09-02
打赏
举报
回复
发表一个凝问,很多年前,我打麻将机上的麻将游戏,在一种情况下,我的牌是不胡的,但我按胡牌
键,他就是胡牌,而且还是四暗刻,害得老板不敢让我玩!这个算法,有谁知道,能告诉我吗?
xiajia
2005-09-01
打赏
举报
回复
算法和你说的一样,要复杂一点,我现在恐怕还不能说得很清楚我的方法,虽然已经可以运行了!
atgjplh
2005-09-01
打赏
举报
回复
这可是数据结构!我回去写一个试试
foochow
2005-09-01
打赏
举报
回复
不会麻将,学习学习
yuanyou
2005-09-01
打赏
举报
回复
mark
wizard13
2005-09-01
打赏
举报
回复
回复人: Flood1984(峰子) ( ) 信誉:108 2005-09-01 09:20:00 得分: 0
因为可能同时存在四张赖子的情况
//我吃了三次牌,手里只剩下了四张赖子,嘿嘿
-----------------------
大叔,那个时候你早胡牌了啊,还用的着吃牌?
xiajia
2005-09-01
打赏
举报
回复
killer1984(人在天涯)的说法我比较同意,但是好像情况应该回避相应的复杂一些,毕竟麻将的胡牌规则是很复杂的,我这里有的关于麻将胡牌的规则就有几十种各有不同,如果每一个都要特殊考虑的话!在计算空间和时间方面的花费是相当严重的!
加载更多回复(27)
各种语言的
麻将
胡牌
算法
。干货。 c++ c# lua go js
麻将
胡牌
算法
.zip
各种语言的
麻将
胡牌
算法
。干货。 c++ c# lua go js
麻将
胡牌
算法
.zip
麻将
胡牌
算法
的判定函数
非常精辟的
胡牌
判定方法,同一牌型如果能拆成多种
胡牌
方式,取番值大的,比如22333444555999,会拆成22,333,444,555,999,而不是234,234,345,55,999
golang版超高效带癞子
麻将
胡牌
算法
golang版
麻将
胡牌
算法
,包含带癞子和不带癞子,将gui_index 设置为34 就是不带癞子的
麻将
胡牌
算法
,gui_index 设置为[0,34)就是带癞子的
麻将
胡牌
算法
C++
麻将
胡牌
算法
时间复杂弃为 O(n) 可谓原地工作的 C++
麻将
胡牌
算法
简单的
麻将
胡牌
算法
实现了简单的
麻将
算法
,喜欢的拿去玩玩,欢迎讨论发现漏洞
C++ 语言
65,208
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章