UVa中国麻将(Chinese Mahjong,Uva 11210)
简单的回溯题
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- 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 convert(char *s)//映射处理
- {
- for(int i=;i<;i++)
- if(strcmp(mahjong[i],s)==)
- return i;
- return -;
- }
- int c[];
- bool search(int dep)
- {
- for(int i=;i<;i++)//枚举刻子
- if(c[i]>=)
- {
- if(dep==) return true;
- c[i]-=;
- if(search(dep+)) return true;
- c[i]+=;
- }
- for(int i=;i<;i++)//枚举顺子
- if(i%<=&&c[i]>=&&c[i+]>=&&c[i+]>=)
- {
- if(dep==) return true;
- c[i]--;c[i+]--;c[i+]--;
- if(search(dep+)) return true;
- c[i]++;c[i+]++;c[i+]++;
- }
- return false;
- }
- bool check()
- {
- for(int i=;i<;i++)//枚举将牌
- if(c[i]>=)
- {
- c[i]-=;
- if(search()) return true;
- c[i]+=;
- }
- return false;
- }
- int main()
- {
- int casen=;
- int mj[];
- char s[];
- bool ok;
- while(cin>>s)
- {
- if(s[]=='') break;
- printf("Case %d:",++casen);
- mj[]=convert(s);
- for(int i=;i<;i++)
- {
- cin>>s;
- mj[i]=convert(s);
- }
- ok=false;
- for(int i=;i<;i++)//枚举听牌
- {
- memset(c,,sizeof(c));
- for(int j=;j<;j++) c[mj[j]]++;
- if(c[i]>=) continue;
- c[i]++;
- if(check())
- {
- ok=true;
- printf(" %s",mahjong[i]);
- }
- c[i]--;
- }
- if(!ok)
- printf(" Not ready");
- printf("\n");
- }
- return ;
- }
UVa中国麻将(Chinese Mahjong,Uva 11210)的更多相关文章
- Chinese Mahjong UVA - 11210 (DFS)
先记录下每一种麻将出现的次数,然后枚举每一种可能得到的麻将,对于这个新的麻将牌,去判断可不可能胡,如果可以胡,就可以把这张牌输出出来. 因为eye只能有一张,所以这个是最好枚举的,就枚举每张牌成为ey ...
- Chinese Mahjong UVA - 11210 (暴力+回溯递归)
思路:得到输入得到mj[]的各个牌的数量,还差最后一张牌.直接暴力枚举34张牌就可以了. 当假设得到最后一张牌,则得到了的牌看看是不是可以胡,如果可以胡的话,就假设正确.否者假设下一张牌. 关键还是如 ...
- UVa11210 中国麻将 Chinese Mahjong-搜索
https://vjudge.net/problem/UVA-11210 //被水题虐了一上午... #include<iostream> #include<cstdio> # ...
- uva 11210 Chinese Mahjong(暴力搜索)
Chinese Mahjong Mahjong () is a game of Chinese origin usually played by four persons with tiles res ...
- UVa 11210 Chinese Mahjong (暴力,递归寻找)
题意:这个题意.有点麻烦,就是说给定13张牌,让你求能“听”的牌.(具体的见原题) 原题链接: https://uva.onlinejudge.org/index.php?option=com_onl ...
- UVA 11210 中国麻将
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 11210 - Chinese Mahjong 模拟, 枚举 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVa 11210 - Chinese Mahjong
解题报告:麻将的规则这里就不说了,这题我们可以用暴力的方法,所以我们应该这样枚举,即将34张牌的每一张牌都放到原来的十三张牌里面去,所以这时我们只要判断这十四张牌能不能胡,因为若要胡的话一定要有一个对 ...
- UVa 11210 (DFS) Chinese Mahjong
大白书第一章的例题,当时看起来很吃力,现如今A这道题的话怎么写都无所谓了. 思路很简单,就是枚举胡哪张牌,然后枚举一下将牌,剩下如果能找到4个顺子或者刻子就胡了. 由于粗心,34个字符串初始化写错,各 ...
随机推荐
- (转)使用HMC接管通过串口或显卡安装的分区操作系统
使用HMC接管通过串口或显卡安装的分区操作系统 原文:http://m.blog.itpub.net/23135684/viewspace-1062084/ 这是一个真实的案例,客户有一台P550的服 ...
- SmartRF Flash Programmer突然打不开显示界面的办法【亲测有效】
在尝试打开任务管理器结束任务之后重新打开依然无果,在尝试了SmartRF Flash Programmer卸载重装无数次之后依然无果的况状,我被SmartRF Flash Programmer存在界面 ...
- ASP.NET中多语言的实现
一个网站可能具备多个语言,要实现这个功能在ASP.NET中是非常简单的.我们需要为项目添加资源文件文件夹,并且添加针对网站的特定的资源文件等即可.在ASP.NET中资源文件分成两类:全局和页面级(即“ ...
- 打乱式排序的Java版实现
项目中涉及到对大批量的数据进行打乱式排序,大概原理如下: 输入源数据:1,1,2,3,3,3,4,4 输出结果: 1,2,3,4,1,3,4,3 实现代码如下,采用递归的思想: static &l ...
- 关于微信小程序登录授权
小程序的API接口文档写的很清晰,现在理一遍思路. 前端通过wx.login()获取code ,把code发给后台,后台返回openid,再获取用户的授权信息(这里先判断是否授权,授权过的就直接进入小 ...
- This blog Test the Open Live Writer
1. We print HELLOWORLD when we first learned to code, I want to Write this blog to test the software ...
- ASP.NET前端调用后台方法
<script> function MyConfirm() { if (confirm('存在重复记录,覆盖点继续,不覆盖追加保存点取消')) { ...
- $.ajax、$.post[转]
jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data ...
- ping过程详解
原出处:http://wanicy.blog.51cto.com/509018/335207/ PS:这里只是给出了ping ip地址的例子,没有给出ping域名的例子. ping 域名还有域名转换成 ...
- Spring课程 Spring入门篇 4-3 Spring bean装配(下)之Autowired注解说明2 集合运用
课程链接: 本节主要讲了以下几块内容 1 注解相关解析 2 代码演练 集合for循环的使用 2.1 list集合应用 2.2 map集合应用 2.3 集合排序(只对list有效,对map无效(list ...