没什么太特别的   只要能判断出最基本能够听牌的牌型就行就是最基本的都是由三个相同的(叫刻子么) 和顺子 外加一对 组成的牌  这个算法应该怎么写呢

解决方案 »

  1.   

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

  2.   

    http://loserwn.biti.org.cn/blog/read.php/100.htm  摘  要  文章通过一个二维数组定义麻将的数据结构,并在此基础上设计了一种判断麻将是否胡牌的算法,该算法主要步骤的时间复杂度为O (n ),且基本上处于“原地工作”。在经过算法判断运算后,该二维数组最终会恢复到最初的数据。
       关键词  麻将;胡牌算法;复杂度
      

  3.   

    我写过这个算法,当时是使用的最原始的方法,先删除杠,再删除一对,然后剩下的都是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;}