题意:输入以16进制的矩阵,先转换成2进制,之后输出形成的图案。

思路:先处理掉无关图案的0,之后一个图案一个图案的遍历,识别图案的方法就是有多少个圈圈。找到一个就全部标记为-1。并且记录圆圈的数目。

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<algorithm>
  5.  
  6. using namespace std;
  7.  
  8. int gragh[][];
  9. int dir[][] = {{-,},{,},{,},{,-}};
  10. char s[];
  11. int n,m,ans;
  12.  
  13. void change(char c,int i,int j)
  14. {
  15. if(c >= '' && c <= ''){
  16. int a = c - '';
  17. gragh[i][(j-)*+] = a%;a /= ;
  18. gragh[i][(j-)*+] = a%;a /= ;
  19. gragh[i][(j-)*+] = a%;a /= ;
  20. gragh[i][(j-)*+] = a%;
  21. }
  22. else {
  23. int a = c - 'a' + ;
  24. gragh[i][(j-)*+] = a%;a /= ;
  25. gragh[i][(j-)*+] = a%;a /= ;
  26. gragh[i][(j-)*+] = a%;a /= ;
  27. gragh[i][(j-)*+] = a%;
  28. }
  29. }
  30.  
  31. void dfs1(int x,int y)
  32. {
  33. gragh[x][y] = -;
  34. for(int i = ;i < ; i++){
  35. int xx = x + dir[i][];
  36. int yy = y + dir[i][];
  37. if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
  38. dfs1(xx,yy);
  39. }
  40. }
  41. }
  42.  
  43. void dfs2(int x,int y)
  44. {
  45. gragh[x][y] = -;
  46. for(int i = ;i < ; i++){
  47. int xx = x + dir[i][];
  48. int yy = y + dir[i][];
  49. if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
  50. dfs1(xx,yy);
  51. ans++;
  52. }
  53. else if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
  54. dfs2(xx,yy);
  55. }
  56. }
  57. }
  58.  
  59. int main()
  60. {
  61. // freopen("in.txt","r",stdin);
  62. int ncase = ;
  63. while(scanf("%d%d",&n,&m) != EOF){
  64. if(n == && m == )
  65. break;
  66.  
  67. memset(gragh,,sizeof(gragh));
  68. memset(s,,sizeof(s));
  69. char c[];
  70. for(int i = ;i <= n; i++){
  71. scanf("%s",c+);
  72. for(int j = m;j >= ; j--){
  73. change(c[j],i,j);
  74. }
  75. }
  76. m *=;
  77.  
  78. for(int i = ;i <= n; i++){
  79. if(gragh[i][] == )
  80. dfs1(i,);
  81. if(gragh[i][m] == )
  82. dfs1(i,m);
  83. }
  84. for(int j = ;j <= m; j++){
  85. if(gragh[][j] == )
  86. dfs1(,j);
  87. if(gragh[n][j] == )
  88. dfs1(n,j);
  89. }
  90. int pos = ;
  91. for(int i = ;i <= n; i++){
  92. for(int j = ;j <= m; j++){
  93. if(gragh[i][j] == ){
  94. ans = ;
  95. dfs2(i,j);
  96. if(ans == ){
  97. s[pos++] = 'A';
  98. }
  99. else if(ans == )
  100. s[pos++] = 'J';
  101. else if(ans == )
  102. s[pos++] = 'D';
  103. else if(ans == )
  104. s[pos++] = 'S';
  105. else if(ans == )
  106. s[pos++] = 'W';
  107. else if(ans == )
  108. s[pos++] = 'K';
  109. }
  110. }
  111. }
  112.  
  113. sort(s,s+pos);
  114. printf("Case %d: ",ncase++);
  115. for(int i = ;i < pos; i++)
  116. printf("%c",s[i]);
  117. printf("\n");
  118. }
  119. return ;
  120. }

UVA1103的更多相关文章

  1. UVA1103 古代象形符号 Ancient Messages 题解

    题目链接: https://www.luogu.org/problemnew/show/UVA1103 题目分析: 我们可以先进行矩阵的还原 for(int k=1;k<=4;k++) { a[ ...

  2. Uva1103 Ancient Messages

    题意:识别图中的象形文字.但是,图形可以任意的拉伸,但不能拉断. 分析:这种题如果图形没有特征是不可做类型的题,不过观察图形可以发现每个图形中的洞的数量是一定的,我们只需要数出每一个封闭图形的洞数就能 ...

  3. 6_13古代象形符号(UVa1103)<图的连通块的应用>

    给出一幅黑白图像,每行相邻的四个点压缩成一个十六进制的字符.然后还有题中图示的6中古老的字符,按字母表顺序输出这些字符的标号. 输出说明:For each test case, display its ...

  4. 这个随笔用用来放一些好的思想和思考方式(暂时secret)

    一: 给你一个只有4和7的数字,求这是第几个幸运数字? 思路: 我们把4映射成0,7映射成1,然后就如下枚举:0,1,00,01,10,11.因为是映射的,所以可以前导0,然后我们就会知道给出的那个数 ...

  5. Ancient Messages UVA - 1103

    题目链接:https://vjudge.net/problem/UVA-1103 题目大意:每组数据包含H行W列的字符矩阵(H<=200,W<=50) 每个字符为为16进制  你需要把它转 ...

  6. LRJ-Example-06-13-Uva1103

    pic[][]数组存储每个点的值,0或1,输入时在原图的周围加了一圈0. color[][]数组存储每个点的color值,从1开始,dfs(row, col, c) 负责对每个点着色,连通在一起的连通 ...

随机推荐

  1. 【转】Sublime Text3注册码(可用)

    补充:2015.11.05日经过测试,3个注册码都是可用的,不会用的请百度用法... 最近觉得Sublime Text3比Notepad++好使,可惜需要购买,于是网上搜了一下,屌丝的福音啊: Sub ...

  2. Sort Characters By Frequency

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  3. VS2013+opencv2.4.9(10)配置[zz]

    1.         下载opencv2.4.9,然后解压到一个位置 设置opencv SDK解压目录,点击Extract后解压 我是习惯于解压到这个位置的. 解压过程如上图. 2.          ...

  4. MFC中使用FLASH

    一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约 ...

  5. 按月统计tcode和report使用次数的工具

    执行report,输入要查询的日期和user, 工具会按照使用次数从高到低列出输入日期所在的月份内所有该user 曾经使用过的tcode 和report list: REPORT zusertcode ...

  6. jdk 编译器 对final字段的处理

    class FinalTest{     void a(){         final int i=10;         int j=10;     } }            stack=2, ...

  7. Git 的深入理解与GitHub托管服务(转)

    源代码管理系统(SCM)与版本控制   版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.   本地版本控制系统   许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会 ...

  8. python 字符串内建函数

    方法 描述 string.capitalize() 把字符串的第一个字符大写 string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 string ...

  9. stm32f10x .icf文件 可以看懂

    /*###ICF### Section handled by ICF editor, don't touch! ****//*-Editor annotation file-*//* IcfEdito ...

  10. C++学习笔记34:泛型编程拓展3

    输入流迭代器 #include <iostream> #include <iterator> #include <algorithm> #include <v ...