简单的回溯题

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. char *mahjong[]={
  8. "1T","2T","3T","4T","5T","6T","7T","8T","9T",
  9. "1S","2S","3S","4S","5S","6S","7S","8S","9S",
  10. "1W","2W","3W","4W","5W","6W","7W","8W","9W",
  11. "DONG","NAN","XI","BEI",
  12. "ZHONG","FA","BAI"
  13. };
  14.  
  15. int convert(char *s)//映射处理
  16. {
  17. for(int i=;i<;i++)
  18. if(strcmp(mahjong[i],s)==)
  19. return i;
  20. return -;
  21. }
  22.  
  23. int c[];
  24.  
  25. bool search(int dep)
  26. {
  27. for(int i=;i<;i++)//枚举刻子
  28. if(c[i]>=)
  29. {
  30. if(dep==) return true;
  31. c[i]-=;
  32. if(search(dep+)) return true;
  33. c[i]+=;
  34. }
  35. for(int i=;i<;i++)//枚举顺子
  36. if(i%<=&&c[i]>=&&c[i+]>=&&c[i+]>=)
  37. {
  38. if(dep==) return true;
  39. c[i]--;c[i+]--;c[i+]--;
  40. if(search(dep+)) return true;
  41. c[i]++;c[i+]++;c[i+]++;
  42. }
  43. return false;
  44. }
  45.  
  46. bool check()
  47. {
  48. for(int i=;i<;i++)//枚举将牌
  49. if(c[i]>=)
  50. {
  51. c[i]-=;
  52. if(search()) return true;
  53. c[i]+=;
  54. }
  55. return false;
  56. }
  57.  
  58. int main()
  59. {
  60. int casen=;
  61. int mj[];
  62. char s[];
  63. bool ok;
  64. while(cin>>s)
  65. {
  66. if(s[]=='') break;
  67. printf("Case %d:",++casen);
  68. mj[]=convert(s);
  69. for(int i=;i<;i++)
  70. {
  71. cin>>s;
  72. mj[i]=convert(s);
  73. }
  74. ok=false;
  75. for(int i=;i<;i++)//枚举听牌
  76. {
  77. memset(c,,sizeof(c));
  78. for(int j=;j<;j++) c[mj[j]]++;
  79. if(c[i]>=) continue;
  80. c[i]++;
  81. if(check())
  82. {
  83. ok=true;
  84. printf(" %s",mahjong[i]);
  85. }
  86. c[i]--;
  87. }
  88. if(!ok)
  89. printf(" Not ready");
  90. printf("\n");
  91. }
  92. return ;
  93. }

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. (转)使用HMC接管通过串口或显卡安装的分区操作系统

    使用HMC接管通过串口或显卡安装的分区操作系统 原文:http://m.blog.itpub.net/23135684/viewspace-1062084/ 这是一个真实的案例,客户有一台P550的服 ...

  2. SmartRF Flash Programmer突然打不开显示界面的办法【亲测有效】

    在尝试打开任务管理器结束任务之后重新打开依然无果,在尝试了SmartRF Flash Programmer卸载重装无数次之后依然无果的况状,我被SmartRF Flash Programmer存在界面 ...

  3. ASP.NET中多语言的实现

    一个网站可能具备多个语言,要实现这个功能在ASP.NET中是非常简单的.我们需要为项目添加资源文件文件夹,并且添加针对网站的特定的资源文件等即可.在ASP.NET中资源文件分成两类:全局和页面级(即“ ...

  4. 打乱式排序的Java版实现

    项目中涉及到对大批量的数据进行打乱式排序,大概原理如下: 输入源数据:1,1,2,3,3,3,4,4 输出结果:   1,2,3,4,1,3,4,3 实现代码如下,采用递归的思想: static &l ...

  5. 关于微信小程序登录授权

    小程序的API接口文档写的很清晰,现在理一遍思路. 前端通过wx.login()获取code ,把code发给后台,后台返回openid,再获取用户的授权信息(这里先判断是否授权,授权过的就直接进入小 ...

  6. 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 ...

  7. ASP.NET前端调用后台方法

    <script>         function MyConfirm() {             if (confirm('存在重复记录,覆盖点继续,不覆盖追加保存点取消')) { ...

  8. $.ajax、$.post[转]

    jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data ...

  9. ping过程详解

    原出处:http://wanicy.blog.51cto.com/509018/335207/ PS:这里只是给出了ping ip地址的例子,没有给出ping域名的例子. ping 域名还有域名转换成 ...

  10. Spring课程 Spring入门篇 4-3 Spring bean装配(下)之Autowired注解说明2 集合运用

    课程链接: 本节主要讲了以下几块内容 1 注解相关解析 2 代码演练 集合for循环的使用 2.1 list集合应用 2.2 map集合应用 2.3 集合排序(只对list有效,对map无效(list ...