UVA1103
题意:输入以16进制的矩阵,先转换成2进制,之后输出形成的图案。
思路:先处理掉无关图案的0,之后一个图案一个图案的遍历,识别图案的方法就是有多少个圈圈。找到一个就全部标记为-1。并且记录圆圈的数目。
- #include<cstdio>
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- int gragh[][];
- int dir[][] = {{-,},{,},{,},{,-}};
- char s[];
- int n,m,ans;
- void change(char c,int i,int j)
- {
- if(c >= '' && c <= ''){
- int a = c - '';
- gragh[i][(j-)*+] = a%;a /= ;
- gragh[i][(j-)*+] = a%;a /= ;
- gragh[i][(j-)*+] = a%;a /= ;
- gragh[i][(j-)*+] = a%;
- }
- else {
- int a = c - 'a' + ;
- gragh[i][(j-)*+] = a%;a /= ;
- gragh[i][(j-)*+] = a%;a /= ;
- gragh[i][(j-)*+] = a%;a /= ;
- gragh[i][(j-)*+] = a%;
- }
- }
- void dfs1(int x,int y)
- {
- gragh[x][y] = -;
- for(int i = ;i < ; i++){
- int xx = x + dir[i][];
- int yy = y + dir[i][];
- if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
- dfs1(xx,yy);
- }
- }
- }
- void dfs2(int x,int y)
- {
- gragh[x][y] = -;
- for(int i = ;i < ; i++){
- int xx = x + dir[i][];
- int yy = y + dir[i][];
- if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
- dfs1(xx,yy);
- ans++;
- }
- else if(xx >= && xx <= n && yy >= && yy <= m && gragh[xx][yy] == ){
- dfs2(xx,yy);
- }
- }
- }
- int main()
- {
- // freopen("in.txt","r",stdin);
- int ncase = ;
- while(scanf("%d%d",&n,&m) != EOF){
- if(n == && m == )
- break;
- memset(gragh,,sizeof(gragh));
- memset(s,,sizeof(s));
- char c[];
- for(int i = ;i <= n; i++){
- scanf("%s",c+);
- for(int j = m;j >= ; j--){
- change(c[j],i,j);
- }
- }
- m *=;
- for(int i = ;i <= n; i++){
- if(gragh[i][] == )
- dfs1(i,);
- if(gragh[i][m] == )
- dfs1(i,m);
- }
- for(int j = ;j <= m; j++){
- if(gragh[][j] == )
- dfs1(,j);
- if(gragh[n][j] == )
- dfs1(n,j);
- }
- int pos = ;
- for(int i = ;i <= n; i++){
- for(int j = ;j <= m; j++){
- if(gragh[i][j] == ){
- ans = ;
- dfs2(i,j);
- if(ans == ){
- s[pos++] = 'A';
- }
- else if(ans == )
- s[pos++] = 'J';
- else if(ans == )
- s[pos++] = 'D';
- else if(ans == )
- s[pos++] = 'S';
- else if(ans == )
- s[pos++] = 'W';
- else if(ans == )
- s[pos++] = 'K';
- }
- }
- }
- sort(s,s+pos);
- printf("Case %d: ",ncase++);
- for(int i = ;i < pos; i++)
- printf("%c",s[i]);
- printf("\n");
- }
- return ;
- }
UVA1103的更多相关文章
- UVA1103 古代象形符号 Ancient Messages 题解
题目链接: https://www.luogu.org/problemnew/show/UVA1103 题目分析: 我们可以先进行矩阵的还原 for(int k=1;k<=4;k++) { a[ ...
- Uva1103 Ancient Messages
题意:识别图中的象形文字.但是,图形可以任意的拉伸,但不能拉断. 分析:这种题如果图形没有特征是不可做类型的题,不过观察图形可以发现每个图形中的洞的数量是一定的,我们只需要数出每一个封闭图形的洞数就能 ...
- 6_13古代象形符号(UVa1103)<图的连通块的应用>
给出一幅黑白图像,每行相邻的四个点压缩成一个十六进制的字符.然后还有题中图示的6中古老的字符,按字母表顺序输出这些字符的标号. 输出说明:For each test case, display its ...
- 这个随笔用用来放一些好的思想和思考方式(暂时secret)
一: 给你一个只有4和7的数字,求这是第几个幸运数字? 思路: 我们把4映射成0,7映射成1,然后就如下枚举:0,1,00,01,10,11.因为是映射的,所以可以前导0,然后我们就会知道给出的那个数 ...
- Ancient Messages UVA - 1103
题目链接:https://vjudge.net/problem/UVA-1103 题目大意:每组数据包含H行W列的字符矩阵(H<=200,W<=50) 每个字符为为16进制 你需要把它转 ...
- LRJ-Example-06-13-Uva1103
pic[][]数组存储每个点的值,0或1,输入时在原图的周围加了一圈0. color[][]数组存储每个点的color值,从1开始,dfs(row, col, c) 负责对每个点着色,连通在一起的连通 ...
随机推荐
- 【转】Sublime Text3注册码(可用)
补充:2015.11.05日经过测试,3个注册码都是可用的,不会用的请百度用法... 最近觉得Sublime Text3比Notepad++好使,可惜需要购买,于是网上搜了一下,屌丝的福音啊: Sub ...
- Sort Characters By Frequency
Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...
- VS2013+opencv2.4.9(10)配置[zz]
1. 下载opencv2.4.9,然后解压到一个位置 设置opencv SDK解压目录,点击Extract后解压 我是习惯于解压到这个位置的. 解压过程如上图. 2. ...
- MFC中使用FLASH
一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约 ...
- 按月统计tcode和report使用次数的工具
执行report,输入要查询的日期和user, 工具会按照使用次数从高到低列出输入日期所在的月份内所有该user 曾经使用过的tcode 和report list: REPORT zusertcode ...
- jdk 编译器 对final字段的处理
class FinalTest{ void a(){ final int i=10; int j=10; } } stack=2, ...
- Git 的深入理解与GitHub托管服务(转)
源代码管理系统(SCM)与版本控制 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统. 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会 ...
- python 字符串内建函数
方法 描述 string.capitalize() 把字符串的第一个字符大写 string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 string ...
- stm32f10x .icf文件 可以看懂
/*###ICF### Section handled by ICF editor, don't touch! ****//*-Editor annotation file-*//* IcfEdito ...
- C++学习笔记34:泛型编程拓展3
输入流迭代器 #include <iostream> #include <iterator> #include <algorithm> #include <v ...