大白书第一章的例题,当时看起来很吃力,现如今A这道题的话怎么写都无所谓了。

思路很简单,就是枚举胡哪张牌,然后枚举一下将牌,剩下如果能找到4个顺子或者刻子就胡了。

由于粗心,34个字符串初始化写错,各种WA。

 #include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
using namespace std; int a[], c[];
string s; string 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 ID(string& maj)
{
for(int i = ; i < ; i++)
if(mahjong[i] == maj) return i;
return -;
} bool dfs(int d)
{
if(d == ) return true;
for(int i = ; i < ; i++) if(c[i] >= )
{
c[i] -= ;
if(dfs(d + )) return true;
c[i] += ;
}
for(int i = ; i <= ; i++) if(i % <= && c[i] && c[i + ] && c[i + ])
{
c[i] -= ; c[i + ] -= ; c[i + ] -= ;
if(dfs(d + )) return true;
c[i] += ; c[i + ] += ; c[i + ] += ;
}
return false;
} bool check()
{
for(int i = ; i < ; i++) if(c[i] >= )
{
c[i] -= ;
if(dfs()) return true;
c[i] += ;
}
return false;
} int main()
{
freopen("in.txt", "r", stdin); int kase = ;
while(cin >> s)
{
if(s[] == '') break;
printf("Case %d:", ++kase); a[] = ID(s);
for(int i = ; i <= ; i++) { cin >> s; a[i] = ID(s); } bool ok = false;
for(int i = ; i < ; i++)
{
memset(c, , sizeof(c));
for(int j = ; j < ; j++) c[a[j]]++;
if(c[i] >= ) continue;
c[i]++;
if(check())
{
ok = true;
printf(" %s", mahjong[i].c_str());
}
}
if(!ok) printf(" Not ready");
printf("\n");
} return ;
}

代码君

UVa 11210 (DFS) Chinese Mahjong的更多相关文章

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

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

  2. Chinese Mahjong UVA - 11210 (DFS)

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

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

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

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

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

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

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

  6. UVa中国麻将(Chinese Mahjong,Uva 11210)

    简单的回溯题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...

  7. UVa 11210 - Chinese Mahjong

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

  8. UVA 11210 中国麻将

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

  9. UVA 572 (dfs)

    题意:找出一块地有多少油田.'@'表示油田.找到一块就全部标记. #include<cstdio> #define maxn 110 char s[maxn][maxn]; int n,m ...

随机推荐

  1. Codis集群的搭建与使用

    一.简介 Codis是一个分布式的Redis解决方案,对于上层的应用来说,连接Codis Proxy和连接原生的Redis Server没有明显的区别(不支持的命令列表),上层应用可以像使用单机的Re ...

  2. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  3. 使用PHP_UML生成代码的UML图

    在读别人代码的时候, 在没有详细文档的时候, 如何快速的看清整个代码的结构(类结构), 就成为了一个现实的问题. 今天我就介绍一种, 自动生成UML图的方法. 假设, 我有一个项目文件夹:laruen ...

  4. POJ 2689 Prime Distance (素数筛选法,大区间筛选)

    题意:给出一个区间[L,U],找出区间里相邻的距离最近的两个素数和距离最远的两个素数. 用素数筛选法.所有小于U的数,如果是合数,必定是某个因子(2到sqrt(U)间的素数)的倍数.由于sqrt(U) ...

  5. FastReport报表

    http://www.fastreportcn.com/product/FASTREPORT_dotNET.html

  6. mysql 存储过程事务支持回滚

    如图查看表的属性: InnoDB 支持事务. MyISAM 不支持事务,不过性能更优越.

  7. UVA 11133 - Eigensequence DP

    Given an increasing sequence of integers a1, a2, a3, . . . , ak, the E-transform produces a sequence ...

  8. 8天学通MongoDB——第三天 细说高级操作

    原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主 ...

  9. proc插入数据到数据库

    #include<stdio.h>EXEC SQL INCLUDE SQLCA; void insert (char password_[6],char id_[20],int balan ...

  10. No ResultSet was produced

    遇到的详细问题: 出现了No ResultSet was produced的异常,但数据是成功插入, 大致判断异常发生在执行插入操作后,检查代码. 解决方案: 通常在executeQuery(sql) ...