弄懂题意后  其实就是一个dfs

  1. /*************************************************************************
  2. > Author: xlc2845 > Mail: xlc2845@gmail.com
  3. > Created Time: 2013年10月22日 星期二 16时20分43秒
  4. ************************************************************************/
  5.  
  6. #include <iostream>
  7. #include <cstdio>
  8. #include <cstdlib>
  9. #include <cmath>
  10. #include <vector>
  11. #include <cstring>
  12. #include <algorithm>
  13. #define maxn 210
  14.  
  15. using namespace std;
  16.  
  17. int g[maxn][maxn];
  18. int n, m, cnt;
  19. int num[6];
  20. char st[6] = {'A', 'D', 'J', 'K', 'S', 'W'};
  21. char str[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
  22. int s[16][4] =
  23. {
  24. {0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1},
  25. {0, 1, 0, 0}, {0, 1, 0, 1}, {0, 1, 1, 0}, {0, 1, 1, 1},
  26. {1, 0, 0, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {1, 0, 1, 1},
  27. {1, 1, 0, 0}, {1, 1, 0, 1}, {1, 1, 1, 0}, {1, 1, 1, 1}
  28. };
  29. bool is_in(int x, int y)
  30. {
  31. if(x >= 0 && x <= n+1 && y >= 0 && y <= m+1)
  32. return true;
  33. return false;
  34. }
  35. void dfs(int x, int y)
  36. {
  37. if(!is_in(x, y) || g[x][y] != 0)
  38. return;
  39. g[x][y] = -1;
  40. dfs(x + 1, y);
  41. dfs(x - 1, y);
  42. dfs(x, y - 1);
  43. dfs(x, y + 1);
  44. }
  45.  
  46. void dfs2(int x, int y)
  47. {
  48. if(!is_in(x, y) || g[x][y] == -1)
  49. return;
  50. if(!g[x][y])
  51. {
  52. dfs(x, y);
  53. cnt++;
  54. return;
  55. }
  56. g[x][y] = -1;
  57. dfs2(x + 1, y);
  58. dfs2(x - 1, y);
  59. dfs2(x, y - 1);
  60. dfs2(x, y + 1);
  61. }
  62.  
  63. int main()
  64. {
  65. int ca = 1;
  66. while(scanf("%d%d", &n, &m) == 2 && n+m)
  67. {
  68. memset(g, 0, sizeof(g));
  69. memset(num, 0, sizeof(num));
  70. for(int i = 1; i <= n; i++)
  71. {
  72. getchar();
  73. char ch;
  74. int len = 1;
  75. for(int j = 0; j < m; j++)
  76. {
  77. scanf("%c", &ch);
  78. for(int k = 0; k < 16; k++)
  79. if(ch == str[k])
  80. {
  81. for(int l = 0; l < 4; l++)
  82. g[i][len++] = s[k][l];
  83. break;
  84. }
  85. }
  86. }
  87. m *= 4;
  88. dfs(0, 0);
  89. for(int i = 1; i <= n; i++)
  90. for(int j = 1; j <= m; j++)
  91. if(g[i][j] == 1)
  92. {
  93. cnt = 0;
  94. dfs2(i, j);
  95. if(!cnt) num[5]++;
  96. else if(cnt == 1) num[0]++;
  97. else if(cnt == 2) num[3]++;
  98. else if(cnt == 3) num[2]++;
  99. else if(cnt == 4) num[4]++;
  100. else num[1]++;
  101. }
  102. printf("Case %d: ", ca++);
  103. for(int i = 0; i < 6; i++)
  104. while(num[i]--)
  105. printf("%c", st[i]);
  106. puts("");
  107. }
  108. return 0;
  109. }

uva 1103的更多相关文章

  1. 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。

    这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...

  2. Ancient Message (古埃及象形文字识别 Uva 1103)

    原题:https://uva.onlinejudge.org/external/11/1103.pdf 给一幅图(16进制), 判断图中有哪些象形文字. 只识别 这6个就可以 示例: 将16进制数据 ...

  3. Uva 1103 古代象形文字

    题目链接:http://vjudge.net/contest/140550#problem/B 紫书P163. 1.根据16进制图转成2进制图. 每个点dfs一下,马上就把最外围的连通分量编号求出来了 ...

  4. UVa 1103 (利用连通块来判断字符) Ancient Messages

    本题就是灵活运用DFS来求连通块来求解的. 题意: 给出一幅黑白图像,每行相邻的四个点压缩成一个十六进制的字符.然后还有题中图示的6中古老的字符,按字母表顺序输出这些字符的标号. 分析: 首先图像是被 ...

  5. Uva 1103 Ancient Messages

    大致思路是DFS: 1. 每个图案所包含的白色连通块数量不一: Ankh : 1 ;  Wedjat : 3  ; Djed : 5   ;   Scarab : 4 ; Was : 0  ;  Ak ...

  6. UVa 1103 Ancient Messages(二重深搜)

    In order to understand early civilizations, archaeologists often study texts written in ancient lang ...

  7. UVA 1103 How Many O's?

    题目链接:UVA-11038 题意为给定n和m,求n和m之间(包含)的所有数包含的0的个数. 思路是,用cal(x)表示小于等于x的数包含的0的个数.则答案为cal(n)-cal(m-1). 再把求c ...

  8. Ancient Messages UVA - 1103

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

  9. Uva 1103 古代象形符号(dfs求连通块, floodfill, 进制转换)

    题意: 给定一个H行W列的字符矩阵(H<200, W < 50), 输入的是一个十六进制字符, 代表一行四个相邻的二进制, 1代表像素, 0代表没有像素. 然后要求判断输入的是以下哪些图形 ...

随机推荐

  1. xml初读

    形式良好的 XML 文档 “形式良好”或“结构良好”的 XML 文档拥有正确的语法. “形式良好”(Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则: XML 文档必须有 ...

  2. ORA-00001: unique constraint (...) violated解决方案

    ORA-00001: unique constraint (...) violated 的解决方案 今天往Oracle数据库里插入数据一条记录的时候,报错了, 控制台抛出异常:违反唯一性约定, 我以为 ...

  3. Cocos2d-x中创建SQLite数据库

    我们下边介绍如何通过SQLite3提供的API实现MyNotes数据库创建.创建数据库一般需要经过如下三个步骤.(1) 使用sqlite3_open函数打开数据库.(2) 使用sqlite3_exec ...

  4. 学习之spring属性文件注入

    package com.my.proper; import org.springframework.beans.factory.annotation.Value; import org.springf ...

  5. (转)分布式搜索Elasticsearch——配置

    配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置.         所有的配置都可以使用环境变量,例如: node.r ...

  6. C/C++输入输出总结

    *string类:  1.cin>>string时,遇到'\n'或者空格即停止,并且'\n'或空格仍留在输入里,即只读了一个单词或什么都没读,但string类自己处理好了空字符什么的.下一 ...

  7. java学习笔记_GUI(3)

    如何加入自己定义的Panel import javax.swing.*; import java.awt.event.*; import java.awt.*; 5 class MyPanel ext ...

  8. 一种简单的权限管理ER图设计

    权限管理支持动态地管理用户的角色和权限.权限代表用户可以在什么对象上进行什么操作:角色是一组权限的集合. PS:当增加或删除某个用户的角色时,系统自动将该角色对应的权限(角色 -权限关联表)增加或删除 ...

  9. linux   截取时间段的日志

      sed -n '/14:[0-9][0-9]:[0-9][0-9]/p’ haproxy.log  截取14点的日志   cat  haproxy.log-20160302 | grep xslh ...

  10. android系统网络信号强弱参数之ecsq指令参数说明

    ecsq指令参数说明: // For LTE (MT6592) // AT+ECSQ:<sig1>,<sig2>,<rssi_in_qdbm>,<rscp_i ...