uva 1103
弄懂题意后 其实就是一个dfs
- /*************************************************************************
- > Author: xlc2845 > Mail: xlc2845@gmail.com
- > Created Time: 2013年10月22日 星期二 16时20分43秒
- ************************************************************************/
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <vector>
- #include <cstring>
- #include <algorithm>
- #define maxn 210
- using namespace std;
- int g[maxn][maxn];
- int n, m, cnt;
- int num[6];
- char st[6] = {'A', 'D', 'J', 'K', 'S', 'W'};
- char str[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
- int s[16][4] =
- {
- {0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1},
- {0, 1, 0, 0}, {0, 1, 0, 1}, {0, 1, 1, 0}, {0, 1, 1, 1},
- {1, 0, 0, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {1, 0, 1, 1},
- {1, 1, 0, 0}, {1, 1, 0, 1}, {1, 1, 1, 0}, {1, 1, 1, 1}
- };
- bool is_in(int x, int y)
- {
- if(x >= 0 && x <= n+1 && y >= 0 && y <= m+1)
- return true;
- return false;
- }
- void dfs(int x, int y)
- {
- if(!is_in(x, y) || g[x][y] != 0)
- return;
- g[x][y] = -1;
- dfs(x + 1, y);
- dfs(x - 1, y);
- dfs(x, y - 1);
- dfs(x, y + 1);
- }
- void dfs2(int x, int y)
- {
- if(!is_in(x, y) || g[x][y] == -1)
- return;
- if(!g[x][y])
- {
- dfs(x, y);
- cnt++;
- return;
- }
- g[x][y] = -1;
- dfs2(x + 1, y);
- dfs2(x - 1, y);
- dfs2(x, y - 1);
- dfs2(x, y + 1);
- }
- int main()
- {
- int ca = 1;
- while(scanf("%d%d", &n, &m) == 2 && n+m)
- {
- memset(g, 0, sizeof(g));
- memset(num, 0, sizeof(num));
- for(int i = 1; i <= n; i++)
- {
- getchar();
- char ch;
- int len = 1;
- for(int j = 0; j < m; j++)
- {
- scanf("%c", &ch);
- for(int k = 0; k < 16; k++)
- if(ch == str[k])
- {
- for(int l = 0; l < 4; l++)
- g[i][len++] = s[k][l];
- break;
- }
- }
- }
- m *= 4;
- dfs(0, 0);
- for(int i = 1; i <= n; i++)
- for(int j = 1; j <= m; j++)
- if(g[i][j] == 1)
- {
- cnt = 0;
- dfs2(i, j);
- if(!cnt) num[5]++;
- else if(cnt == 1) num[0]++;
- else if(cnt == 2) num[3]++;
- else if(cnt == 3) num[2]++;
- else if(cnt == 4) num[4]++;
- else num[1]++;
- }
- printf("Case %d: ", ca++);
- for(int i = 0; i < 6; i++)
- while(num[i]--)
- printf("%c", st[i]);
- puts("");
- }
- return 0;
- }
uva 1103的更多相关文章
- 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。
这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...
- Ancient Message (古埃及象形文字识别 Uva 1103)
原题:https://uva.onlinejudge.org/external/11/1103.pdf 给一幅图(16进制), 判断图中有哪些象形文字. 只识别 这6个就可以 示例: 将16进制数据 ...
- Uva 1103 古代象形文字
题目链接:http://vjudge.net/contest/140550#problem/B 紫书P163. 1.根据16进制图转成2进制图. 每个点dfs一下,马上就把最外围的连通分量编号求出来了 ...
- UVa 1103 (利用连通块来判断字符) Ancient Messages
本题就是灵活运用DFS来求连通块来求解的. 题意: 给出一幅黑白图像,每行相邻的四个点压缩成一个十六进制的字符.然后还有题中图示的6中古老的字符,按字母表顺序输出这些字符的标号. 分析: 首先图像是被 ...
- Uva 1103 Ancient Messages
大致思路是DFS: 1. 每个图案所包含的白色连通块数量不一: Ankh : 1 ; Wedjat : 3 ; Djed : 5 ; Scarab : 4 ; Was : 0 ; Ak ...
- UVa 1103 Ancient Messages(二重深搜)
In order to understand early civilizations, archaeologists often study texts written in ancient lang ...
- UVA 1103 How Many O's?
题目链接:UVA-11038 题意为给定n和m,求n和m之间(包含)的所有数包含的0的个数. 思路是,用cal(x)表示小于等于x的数包含的0的个数.则答案为cal(n)-cal(m-1). 再把求c ...
- Ancient Messages UVA - 1103
题目链接:https://vjudge.net/problem/UVA-1103 题目大意:每组数据包含H行W列的字符矩阵(H<=200,W<=50) 每个字符为为16进制 你需要把它转 ...
- Uva 1103 古代象形符号(dfs求连通块, floodfill, 进制转换)
题意: 给定一个H行W列的字符矩阵(H<200, W < 50), 输入的是一个十六进制字符, 代表一行四个相邻的二进制, 1代表像素, 0代表没有像素. 然后要求判断输入的是以下哪些图形 ...
随机推荐
- xml初读
形式良好的 XML 文档 “形式良好”或“结构良好”的 XML 文档拥有正确的语法. “形式良好”(Well Formed)的 XML 文档会遵守前几章介绍过的 XML 语法规则: XML 文档必须有 ...
- ORA-00001: unique constraint (...) violated解决方案
ORA-00001: unique constraint (...) violated 的解决方案 今天往Oracle数据库里插入数据一条记录的时候,报错了, 控制台抛出异常:违反唯一性约定, 我以为 ...
- Cocos2d-x中创建SQLite数据库
我们下边介绍如何通过SQLite3提供的API实现MyNotes数据库创建.创建数据库一般需要经过如下三个步骤.(1) 使用sqlite3_open函数打开数据库.(2) 使用sqlite3_exec ...
- 学习之spring属性文件注入
package com.my.proper; import org.springframework.beans.factory.annotation.Value; import org.springf ...
- (转)分布式搜索Elasticsearch——配置
配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置. 所有的配置都可以使用环境变量,例如: node.r ...
- C/C++输入输出总结
*string类: 1.cin>>string时,遇到'\n'或者空格即停止,并且'\n'或空格仍留在输入里,即只读了一个单词或什么都没读,但string类自己处理好了空字符什么的.下一 ...
- java学习笔记_GUI(3)
如何加入自己定义的Panel import javax.swing.*; import java.awt.event.*; import java.awt.*; 5 class MyPanel ext ...
- 一种简单的权限管理ER图设计
权限管理支持动态地管理用户的角色和权限.权限代表用户可以在什么对象上进行什么操作:角色是一组权限的集合. PS:当增加或删除某个用户的角色时,系统自动将该角色对应的权限(角色 -权限关联表)增加或删除 ...
- linux 截取时间段的日志
sed -n '/14:[0-9][0-9]:[0-9][0-9]/p’ haproxy.log 截取14点的日志 cat haproxy.log-20160302 | grep xslh ...
- android系统网络信号强弱参数之ecsq指令参数说明
ecsq指令参数说明: // For LTE (MT6592) // AT+ECSQ:<sig1>,<sig2>,<rssi_in_qdbm>,<rscp_i ...