简单的回溯题

 #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)的更多相关文章

  1. Chinese Mahjong UVA - 11210 (DFS)

    先记录下每一种麻将出现的次数,然后枚举每一种可能得到的麻将,对于这个新的麻将牌,去判断可不可能胡,如果可以胡,就可以把这张牌输出出来. 因为eye只能有一张,所以这个是最好枚举的,就枚举每张牌成为ey ...

  2. Chinese Mahjong UVA - 11210 (暴力+回溯递归)

    思路:得到输入得到mj[]的各个牌的数量,还差最后一张牌.直接暴力枚举34张牌就可以了. 当假设得到最后一张牌,则得到了的牌看看是不是可以胡,如果可以胡的话,就假设正确.否者假设下一张牌. 关键还是如 ...

  3. UVa11210 中国麻将 Chinese Mahjong-搜索

    https://vjudge.net/problem/UVA-11210 //被水题虐了一上午... #include<iostream> #include<cstdio> # ...

  4. uva 11210 Chinese Mahjong(暴力搜索)

    Chinese Mahjong Mahjong () is a game of Chinese origin usually played by four persons with tiles res ...

  5. UVa 11210 Chinese Mahjong (暴力,递归寻找)

    题意:这个题意.有点麻烦,就是说给定13张牌,让你求能“听”的牌.(具体的见原题) 原题链接: https://uva.onlinejudge.org/index.php?option=com_onl ...

  6. UVA 11210 中国麻将

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. UVa 11210 - Chinese Mahjong 模拟, 枚举 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  8. UVa 11210 - Chinese Mahjong

    解题报告:麻将的规则这里就不说了,这题我们可以用暴力的方法,所以我们应该这样枚举,即将34张牌的每一张牌都放到原来的十三张牌里面去,所以这时我们只要判断这十四张牌能不能胡,因为若要胡的话一定要有一个对 ...

  9. UVa 11210 (DFS) Chinese Mahjong

    大白书第一章的例题,当时看起来很吃力,现如今A这道题的话怎么写都无所谓了. 思路很简单,就是枚举胡哪张牌,然后枚举一下将牌,剩下如果能找到4个顺子或者刻子就胡了. 由于粗心,34个字符串初始化写错,各 ...

随机推荐

  1. WPF 正確理解ContentPresenter

    我們先由下圖來看類層次,可知ContentControl繼承Control,ContentPresenter繼承FrameworkElement(Control也繼承FrameworkElement) ...

  2. apache配置多端口对应多个虚拟目录

    经常需要在本地调试网站,却又不喜欢在http://localhost/网站的文件夹名 且几个比较重要的项目我想直接用端口号以示区分,想达到的效果如下: http://localhost/ 默认80端口 ...

  3. css3重点回顾字体

    1.字体 免费字体下载https://cn.ffonts.net/

  4. mustache语法 转自小花大方

    mustache语法 mustache 模板,用于构造html页面内容.在实际工作中,当同一个模板中想要调用不同的函数来渲染画面,在已经自定义好了的前提下,可以在渲染页面时对传入的参数进行手动判断.[ ...

  5. Newtonsoft.Json解析json字符串和写json字符串

    写: StringWriter sw = new StringWriter(); JsonWriter writer = new JsonWriter(sw); //如果报错则使用JsonWriter ...

  6. HttpClient4.3.3 禁止自动重定向

    HttpClient4.3中默认允许自动重定向,导致程序中不能跟踪跳转情况,其实只需要在RequestConfig中setRedirectsEnabled(false)即可(默认是true): pri ...

  7. [转]一次使用Eclipse Memory Analyzer分析Tomcat内存溢出

    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出 前言 在平时开发.测试过程中.甚至是生产环境中,有时会遇到OutOfMemoryError,Java堆溢出了,这表明程序 ...

  8. Linux 拷贝

    拷贝文件夹下所有内容到另一个文件夹: cp -rf 源文件 目标文件 例如:cp -rf /home/efs/Desktop/WEB-INF/* /opt/IBM/WebSphere/AppServe ...

  9. 动态计算UITableViewCell高度详解 (转)

    感觉挺有用的一篇文章,分析了4种解决方案.回头测试之.如果有别的方案,我会在后面补上. 原文地址:http://www.ifun.cc/blog/2014/02/21/dong-tai-ji-suan ...

  10. vue ------ 安装和引入

    Vue.js 的官网上直接下载 vue.min.js 并用 <script> 标签引入.: http://vuejs.org/js/vue.min.js 以下推荐国外比较稳定的两个 CDN ...