链接:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2151
经典的一道暴力回溯题,今天终于做了。。
#include<cstdio>
#include<cstring>
#include<map>
#include<set>
#include<string>
using namespace std;
int n;
int hand[14];
int cnt[35], tmp_cnt[35];
char str[10];
map<string, int>majiang;
char buf[][6] = {
"1T","2T","3T","4T","5T","6T","7T","8T","9T", // 0~8
"1S","2S","3S","4S","5S","6S","7S","8S","9S", // 9~17
"1W","2W","3W","4W","5W","6W","7W","8W","9W", // 18~26
"DONG","NAN","XI","BEI", // 27~30
"ZHONG","FA","BAI" // 31~33
};
inline void read(){
memset(cnt, 0, sizeof(cnt));
hand[0] = majiang[str];
++cnt[hand[0]];
for(int i=1; i<13; ++i){
scanf("%s", str);
hand[i] = majiang[str];
++cnt[hand[i]];
}
}
// 判断能否组成顺子,i是顺子中最小的那张
inline bool isChow(int i){
return (i<=6 || i>=9&&i<=15 || i>=18&&i<=24) &&
cnt[i]>=1 && cnt[i+1]>=1 && cnt[i+2]>=1;
}
bool check(int cur){
if(cur==14){
return true;
}
if(cur==0){ // 选主将
for(int i=0; i<13; ++i){
for(int j=i+1; j<14; ++j)if(hand[i]==hand[j]){
--cnt[hand[i]]; --cnt[hand[j]];
if(check(cur+2)) return true;
++cnt[hand[i]]; ++cnt[hand[j]];
}
}
}else{
for(int i=0; i<34; ++i)if(cnt[i]>0){
if(cnt[i]<3 && !isChow(i)) return false;
if(cnt[i]>=3){
cnt[i] -= 3;
if(check(cur+3)) return true;
cnt[i] += 3;
}
if(isChow(i)){
--cnt[i]; --cnt[i+1]; --cnt[i+2];
if(check(cur+3)) return true;
++cnt[i]; ++cnt[i+1]; ++cnt[i+2];
}
}
}
return false;
}
int main(){
int cas=1;
// init
majiang.clear();
for(int i=0; i<34; ++i)
majiang[buf[i]] = i;
while(~scanf("%s", str) && str[0]!='0'){
read();
printf("Case %d:", cas++);
memcpy(tmp_cnt, cnt, sizeof(cnt));
bool ok=false;
for(int i=0; i<34; ++i)if(cnt[i]!=4){
hand[13] = i;
++cnt[i];
if(check(0))
printf(" %s", buf[i]), ok=true;
memcpy(cnt,tmp_cnt,sizeof(tmp_cnt));
}
if(!ok) puts(" Not ready");
else puts("");
}
return 0;
}
分享到:
相关推荐
中文麻将 自述文件:| 本届中国标准麻将比赛由北京大学AILab和潍坊宇(北京)科技有限公司主办。 单击导航到Botzone上的麻将比赛。 是一个通用的在线多代理游戏AI平台,旨在通过将游戏AI应用于代理并相互竞争来...
Mahjong
VC做的麻将游戏,界面美观,功能完善,全部分享给大家,希望喜欢!
日本麻将助手 主要功能 对战时自动分析手牌,综合进张、打点等,给出推荐舍牌 有人立直或多副露时,显示各张牌的危险度 记录他家手切摸切 助手带你看牌谱,推荐每一打的进攻和防守选择 支持四人麻将和三人麻将 ...
在 Unix/Linux 系统上,进入 mahjong 目录,键入 make 命令,如果一切顺利的话,将生成 mj 可执行文件,然后在命令行上运行 ./mj 程序,也可以启动麻将游戏。哈哈,来句关键的,有没有发现“使用 GNU autotools 改造...
ALI编的麻将连连看,可以作为编写游戏失败的教训参考。
鸡眼麻将(Riichi Mahjong)模拟,分析和玩应用程序。例子有关麻将应用程序和AI的示例,请访问 。用法使用npm update安装依赖项。 使用启动应用程序 node app.js然后访问 。 要分析一只手,请访问 。发展sudo docker...
小时候在游戏厅玩的那种电子麻将,偶然的机会得到一个用c++写的该游戏的源代码,还是跨平台的,在windows和linux下均可编译,执行。其娱乐性就不必说了,而且还是学习跨平台编程的样板。
语言:English,Filipino 麻将是使用一组瓷砖的经典游戏。 此游戏的目标是匹配相同的图块并将其从 麻将是使用一组瓷砖的经典游戏。 该游戏的目标是匹配相同的瓷砖并将其从棋盘上移除。 这将露出下面的瓷砖,并使它们...
麻将Go中的麻将图书馆
Canto Plus麻将网站 专为JA公司Canto +设计的网页,网址为20-21。 这提供了帮助玩家记录他们在麻将中得分的服务。 经过特定的回合数后,网站将为用户提供随机惩罚。 同时,用户也可以输入自己的惩罚。
收藏的unity3d单机4人麻将项目资源,该有的一应俱全。如有需要的自行下载,仅供学习参考,否则后果自负。
用Scala以实用风格编写的麻将API。 受启发包含以下功能: 初始化并打麻将的马来西亚变体游戏。 此变体适用于3个玩家,每个玩家都可以执行,动作,敲击和打Kong动作。 为马来西亚版本使用定制件套,最值得注意的是...
繁体中文棋盘游戏(不是单人模式)。 http://openmahjong.sourceforge.net/的新版本,使用不同的编码模式,包括以下内容:模型-视图-控制器(MVC)。 现在与Chow :-D
Mahjong Solitaire : 300 Puzzle Levels 支持Unity版本5.6.2f1及以上 麻将纸牌:300 个谜题关卡 Unity麻将连连看项目源码C# 麻将纸牌是排名第一的单人纸牌配对游戏,使用一组麻将牌。对于寻求乐趣和广泛重玩的休闲...
python Mahjong
python mahjong
简单的虚拟麻将-虚拟Riichi麻将- :mahjong_red_dragon: 在HTML5 + Javascript上运行的麻将游戏,其规则不是原始的中国麻将,而是在日本广泛使用的日本麻将。在国际上,日本麻将为Riichi Mahjong。日本麻将。 推荐的...
麻将纸牌出于教育目的,用 Java 和 libgdx(有很多 hacky hack)编写。谢谢用于磁贴图标的 KDE Games (libkmahjongg) 背景作者和背景的微妙模式执照除android/assets/data/tiles和android/assets/data/backgrounds...