Uva-11210-Chinese Mahjong
来源:互联网 发布:农产品网络营销策划 编辑:程序博客网 时间:2024/05/18 07:34
这个题是对麻将的一个模拟,要求求出所有可以“听"牌的可能,其实可以枚举所有的牌然后进行搜索看这张牌是否可以成为听牌,而如果拥有着张牌后能够成功的和牌,那么就说明这张牌能够成为听牌。
再添加某张牌后,选一个多余或等于2张的牌出来,然后进行进一步搜索判断这张牌是否可以成为听牌。
其中还需要注意的是同种牌不能超过4张。
代码:
#include<cstdio>#include<cstring>#include<iostream>using namespace std;const char* mahjong[]={"1T","2T","3T","4T","5T","6T","7T","8T","9T", "1S","2S","3S","4S","5S","6S","7S","8S","9S", "1W","2W","3W","4W","5W","6W","7W","8W","9W", "DONG","NAN","XI","BEI", "ZHONG","FA","BAI"};int m[20],mm[50];int GetIndex(char *str){ for(int i=0;i<34;i++)if(!strcmp(mahjong[i],str)) return i;}bool DFSS(int res){ if(!res)return true; for(int i=0;i<34;i++)if(mm[i]>=3){ mm[i]-=3; if(DFSS(res-3))return true; mm[i]+=3;} for(int i=0;i<27;i++) {if(i%9<=6&&mm[i]&&mm[i+1]&&mm[i+2]){ mm[i]--;mm[i+1]--;mm[i+2]--; if(DFSS(res-3))return true; mm[i]++;mm[i+1]++;mm[i+2]++;} } return false;}bool DFS(){ for(int i=0;i<34;i++) {if(mm[i]>=2){ mm[i]-=2; if(DFSS(12))return true; mm[i]+=2;} } return false;}int main(){ char str[100]; int mmas=1; while(scanf("%s",str)!=EOF) {if(str[0]=='0') break;printf("Case %d:",mmas++);m[0]=GetIndex(str);for(int i=1;i<13;i++){ scanf("%s",str); m[i]=GetIndex(str);}bool getans=false;for(int i=0;i<34;i++){ memset(mm,0,sizeof(mm)); for(int j=0;j<13;j++)mm[m[j]]++; if(mm[i]>=4)continue; mm[i]++; if(DFS()) {getans=true;printf(" %s",mahjong[i]); } mm[i]--;}if(!getans) printf(" Not ready");printf("\n"); } return 0;}
- uva 11210 Chinese Mahjong
- Uva-11210-Chinese Mahjong
- uva 11210 - Chinese Mahjong
- Uva 11210 Chinese Mahjong
- UVA 11210 Chinese Mahjong
- UVA 11210 Chinese Mahjong
- UVA 11210 Chinese Mahjong
- UVA - 11210 Chinese Mahjong
- UVA-11210-Chinese Mahjong
- UVA 11210 Chinese Mahjong
- UVA 11210 - Chinese Mahjong
- Uva 11210 - Chinese Mahjong
- Uva-11210-Chinese Mahjong
- UVA 11210 Chinese Mahjong
- UVA 11210 [Chinese Mahjong]
- UVA 11210 Chinese Mahjong -
- UVa 11210 - Chinese Mahjong
- UVA - 11210 Chinese Mahjong 枚举
- Write operations are not allowed in read-only mode
- cocos2d游戏 判断触摸点是否触摸到精灵上
- Linux root忘记密码如何登陆-详解
- PackManager和ActivityManager的功能介绍
- 校园网认证
- Uva-11210-Chinese Mahjong
- 用特殊标示符编写简单的测试程序
- python单例模式
- 应用里面调用安装应用的方法
- 感
- 一个网站的建设步骤(写给新手)
- delphi 使用image动态加载图片时的错误提醒
- android平板最小system/app
- Java EE体系结构