【codevs 1293】送给圣诞夜的极光
来源:互联网 发布:淘宝怎么好评改差评 编辑:程序博客网 时间:2024/05/18 02:12
1293 送给圣诞夜的极光
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题解
题目描述 Description
圣诞老人回到了北极圣诞区,已经快到12点了。也就是说极光表演要开始了。这里的极光不是极地特有的自然极光景象。而是圣诞老人主持的人造极光。
轰隆隆……烟花响起(来自中国的浏阳花炮之乡)。接下来就是极光表演了。
人造极光其实就是空中的一幅幅n*m的点阵图像。只是因为特别明亮而吸引了很多很多小精灵的目光,也成为了圣诞夜最美丽的一刻。
然而在每幅n*m的点阵图像中,每一个点只有发光和不发光两种状态。对于所有的发光的点,在空中就形成了美丽的图画。而这个图画是以若干个(s个)图案组成的。对于图案,圣诞老人有着严格的定义:对于两个发光的点,如果他们的曼哈顿距离(对于A(x1,y1)和B(x2,y2),A和B之间的曼哈顿距离为|x1-x2|+|y1-y2|)小于等于2。那么这两个点就属于一个图案……
小精灵们一边欣赏着极光,一边数着每一幅极光图像中的图案数。伴着歌声和舞蹈,度过了美丽的圣诞之夜。^_^
输入描述 Input Description
第一行,两个数n和m。(1<=n,m<=100)
接下来一共n行,每行m个字符。对于第i行第j个字符,如果其为“-”,那么表示该点不发光,如果其为“#”,那么表示该点发光。不可能出现其他的字符。
输出描述 Output Description
第一行,一个数s。
样例输入 Sample Input
19 48
—####—–#—–#———————-####—
–######—-#—–#———————######–
-########–#-#—#-#####–#-##-##—#–########-
-###–###–#-#—#-#—-#-##-##–#–#–###–###-
-###–###–#–#-#–######-#–#—#-#—###–###-
-########–#–#-#–#——#–#—-##—########-
–######—#—#—######-#–#—–#—-######–
—####—————————-#—–####—
———————————-#————-
—###–#——–#——#———————–
–#—#-#—————#———————–
-#——#-##–#-##–##-###-#-##-###–###-#–##–
-#——##–#-##-#-#—-#–##–#—##—##-#—-
-#——#—#-#–#–#—#–#—#—##—-#–#—
–#—#-#—#-#–#—#–#–#—#—##—##—#–
—###–#—#-#–#-##—#–#—#—#-###-#-##—
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
嗯 搜索
按照题目要求搜连通块
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;int dx[] = {1,0,-1,0,1,1,-1,-1,2,0,-2,0};int dy[] = {0,1,0,-1,1,-1,1,-1,0,2,0,-2};const int MAXN = 105;int n,m,maps[MAXN][MAXN];int ans = 0;bool use[MAXN][MAXN];char s;struct edge{ int x,y;};bool out(int x,int y){ if(x < 1 || x > n || y < 1 || y > m) return false; else return true;}queue < edge > q;void work(int x,int y,int k){ while(!q.empty()) q.pop(); q.push((edge){x,y}); use[x][y] = true; maps[x][y] = 0; while(!q.empty()) { edge u = q.front(); q.pop(); use[u.x][u.y] = true; maps[u.x][u.y] = 0; for(int i = 0; i < 12; i ++) { int tx = u.x + dx[i]; int ty = u.y + dy[i]; if(!out(tx,ty)) continue; if(use[tx][ty] > 0) continue; if(maps[tx][ty] != 2) { maps[tx][ty] = 0; continue; } use[tx][ty] = true; maps[tx][ty] = 0; q.push((edge){tx,ty}); } } return;}int main(){ memset(use,0,sizeof(use)); memset(maps,0,sizeof(maps)); scanf("%d %d",&n,&m); for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) { cin >> s; if(s == '#') maps[i][j] = 2; else if(s == '-') maps[i][j] = 1,use[i][j] = true; else cin >> s; } int k = 0; for(int i = 1; i <= n; i ++) for(int j = 1; j <= m;j ++) if(!use[i][j]) work(i,j,k ++); ans = k; printf("%d\n",ans); return 0;}
- codevs 1293 送给圣诞夜的极光
- 【codevs 1293】送给圣诞夜的极光
- Vijos1051. 送给圣诞夜的极光
- vijos 1051 送给圣诞夜的极光
- Vijos 1051 送给圣诞夜的极光
- P1051送给圣诞夜的极光 RE算法
- vijos P1051 送给圣诞夜的极光
- 【宽搜】Vijos P1051 送给圣诞夜的极光
- Vijos 送给圣诞夜的极光(bfs)
- Vijos P1051 送给圣诞夜的极光(DFS搜索)
- 送给圣诞夜的礼品
- vijosP1049 送给圣诞夜的礼品
- vijos1049 送给圣诞夜的礼品
- [vijos1048]送给圣诞夜的贺卡
- 【搜索\位集合】送给圣诞夜的贺卡
- vijos 1049 送给圣诞夜的礼品
- 【vijos1049】【矩阵乘法】送给圣诞夜的礼品
- vijos1049——送给圣诞夜的礼品
- iOS 后台运行的规则
- Caffe的使用
- CSS背景图拉伸自适应尺寸,全浏览器兼容
- Ubuntu 16.04源码编译安装Apache 2.4.25
- 常见系统存储过程
- 【codevs 1293】送给圣诞夜的极光
- 检测坏盘
- 第一篇博客
- 连续子数组的最大和
- vba 爬虫常用对象和方法
- synchronized——可重入性
- POJ 1113 Wall (凸包)
- Java编程思想第四版完整中文高清版.pdf
- 浏览器内核与前缀