Uva1103 Ancient Messages
题意:识别图中的象形文字。但是,图形可以任意的拉伸,但不能拉断。
分析:这种题如果图形没有特征是不可做类型的题,不过观察图形可以发现每个图形中的洞的数量是一定的,我们只需要数出每一个封闭图形的洞数就能知道这是哪个图形.
虽然知道了原理,但是并不是特别好做,首先我们需要一次dfs将所有图形旁边的点全都变为“不可访问”,然后从每个黑点开始枚举,向四周扩展,遇到白色的块就用第一次的dfs函数覆盖,否则继续第二次dfs,两次dfs交错使用,思路比较巧妙.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; //0表示空白位置,-1表示不能访问了. const int maxn = ; int n, m,kase,a[maxn][maxn],flag[maxn][maxn],cnt,num[maxn];
char s16[] = { '', '', '', '', '', '', '', '', '', '', 'a', 'b', 'c', 'd', 'e', 'f' };
char fuhao[] = { 'A', 'D', 'J', 'K', 'S', 'W' };
int s2[][] =
{
{ , , , }, { , , , }, { , , , }, { , , , },
{ , , , }, { , , , }, { , , , }, { , , , },
{ , , , }, { , , , }, { , , , }, { , , , },
{ , , , }, { , , , }, { , , , }, { , , , }
}; void dfs1(int x,int y)
{
if (x < || x > n + || y < || y > m + || a[x][y] != )
return;
a[x][y] = -;
dfs1(x - , y);
dfs1(x + , y);
dfs1(x, y - );
dfs1(x, y + );
} void dfs2(int x, int y)
{
if (x < || x > n + || y < || y > m + || a[x][y] == -)
return;
if (a[x][y] == )
{
cnt++;
dfs1(x, y);
return;
}
a[x][y] = -;
dfs2(x - , y);
dfs2(x + , y);
dfs2(x, y - );
dfs2(x, y + );
} int main()
{
while (scanf("%d%d", &n, &m) == && (n || m))
{
memset(a, , sizeof(a));
memset(num, , sizeof(num));
for (int i = ; i <= n; i++)
{
getchar();
char ch;
int tot = ;
for (int j = ; j <= m; j++)
{
scanf("%c", &ch);
for (int k = ; k < ; k++)
{
if (ch == s16[k])
{
for (int l = ; l < ; l++)
a[i][++tot] = s2[k][l];
break;
}
}
}
}
m *= ;
dfs1(, );
for (int i = ; i < n; i++)
for (int j = ; j < m; j++)
if (a[i][j] == )
{
cnt = ;
dfs2(i, j);
if (cnt == )
num[]++;
if (cnt == )
num[]++;
if (cnt == )
num[]++;
if (cnt == )
num[]++;
if (cnt == )
num[]++;
if (cnt == )
num[]++;
}
printf("Case %d: ", ++kase);
for (int i = ; i <= ; i++)
{
while (num[i]--)
printf("%c", fuhao[i]);
}
printf("\n");
} return ;
}
Uva1103 Ancient Messages的更多相关文章
- K - Ancient Messages(dfs求联通块)
K - Ancient Messages Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Subm ...
- UVA1103 古代象形符号 Ancient Messages 题解
题目链接: https://www.luogu.org/problemnew/show/UVA1103 题目分析: 我们可以先进行矩阵的还原 for(int k=1;k<=4;k++) { a[ ...
- UVa 1103 Ancient Messages(二重深搜)
In order to understand early civilizations, archaeologists often study texts written in ancient lang ...
- Ancient Messages UVA - 1103
题目链接:https://vjudge.net/problem/UVA-1103 题目大意:每组数据包含H行W列的字符矩阵(H<=200,W<=50) 每个字符为为16进制 你需要把它转 ...
- HDU 3839 Ancient Messages(DFS)
In order to understand early civilizations, archaeologists often study texts written in ancient lang ...
- hdu 3839 Ancient Messages (dfs )
题目大意:给出一幅画,找出里面的象形文字. 要你翻译这幅画,把象形文字按字典序输出. 思路:象形文字有一些特点,分别有0个圈.1个圈.2个圈...5个圈.然后dfs或者bfs,就像油井问题一样,找出在 ...
- UVa 1103 (利用连通块来判断字符) Ancient Messages
本题就是灵活运用DFS来求连通块来求解的. 题意: 给出一幅黑白图像,每行相邻的四个点压缩成一个十六进制的字符.然后还有题中图示的6中古老的字符,按字母表顺序输出这些字符的标号. 分析: 首先图像是被 ...
- Uva 1103 Ancient Messages
大致思路是DFS: 1. 每个图案所包含的白色连通块数量不一: Ankh : 1 ; Wedjat : 3 ; Djed : 5 ; Scarab : 4 ; Was : 0 ; Ak ...
- 【例题 6-13 UVA - 1103】Ancient Messages
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个图案里面的"洞"的个数都是不同的. 则可以根据这个判别每个图像是什么. 先用dfs确定轮廓之后. 再从每个白 ...
随机推荐
- C#多线程,基础知识很重要
本文通过介绍C#多线程的用法(基础玩法),附加介绍一下WinForm里边跨线程访问UI的方法 如图,就是这么一个简单的界面,每个按钮下面一个方法,分别设置文本框里边的内容,那么,开始吧! 先介绍一下W ...
- JavaScript编程艺术-第10章-10.2-实用的动画
10.2-实用的动画 ***代码亲测可用*** HTML: <!DOCTYPE HTML> <html> <head> <meta charset=" ...
- RHEL5.6环境下yum安装MySQL
RHEL5.6环境下yum安装MySQL记录,2017年2月20日 1.卸载原有的MySQL rpm -qa命令查询是否安装了MySQL [root@localhost mysql]# rpm -qa ...
- Appium环境部署
Appium 是一个开源.跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持 iOS, Android平台. 需要部署的软件:python环境.nodejs..net framework4.5. ...
- Java运行报错问题——Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook
http://blog.csdn.net/xifeijian/article/details/8830933 上述这个朋友博文提醒,可能是因为其他软件添加了JAVA_HOME的路径造成冲突.但他支持删 ...
- Hive DDL&DML
1.删除分区 ALTER TABLE table_name DROP IF EXISTS PARTITION(dt=') 如果是外部表,记得rm对应文件 2.添加分区 ALTER TABLE tabl ...
- HTML5大数据可视化效果(一)彩虹爆炸图
前言 25年过去了,Brooks博士著名的“没有银弹”的论断依旧没有被打破.HTML5也是一样.但这并不妨碍HTML5是一个越来越有威力的“炸蛋”:发展迅速.势不可挡.随着HTML5技术的普及,用HT ...
- xmpp消息回执(6)
原始地址:XMPPFrameWork IOS 开发(七)消息回执 请参考:XEP-0184协议 协议内容: 发送消息时附加回执请求 <message from='northumberland@s ...
- Codeforces 280C - Game on Tree
传送门:280C - Game on Tree 不知道期望是啥的请自行Baidu或Google,(溜了 题目大意,有一棵有根树,每次随机选择一个节点,将这个节点和它的子树删除,问将整棵树删除的期望次数 ...
- trie字典树模板浅析
什么是trie? 百度百科 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的 ...