vijos P1051 送给圣诞夜的极光
2015-11-14 19:03
302 查看
调了好久。。。
#include <cstdio> #include <queue> using namespace std; char a[110*110]; /************************************** 000000000000 000000000000 00----####00 00###----#00 //like dis 00##--##--00 000000000000 000000000000 **************************************/ int visited[110*110]; int cnt; int of1x[] = {-1, 0, 1, 0}; int of1y[] = {0, -1, 0, 1}; int of2x[] = {0, 1, 2, 1, 0, -1, -2, -1}; int of2y[] = {2, 1, 0, -1, -2, -1, 0, 1}; int main(){ int m, n; scanf("%d%d", &m, &n); getchar(); for(int i = 2; i < m+2; ++i){ for(int j = 2; j < n+2; ++j){ a[i*(n+4)+j] = getchar(); } getchar(); } n = n+4; queue<int> Q; for(int i = 0; i < (m+4)*n-1; ++i){ if(!visited[i] && a[i] == '#'){ int now = i; visited[now] = 2; cnt++; Q.push(now); do{ //搜索附近 now = Q.front(); Q.pop(); int x = now%n; int y = now/n; if(visited[now] == 2){ //now是第二圈 for(int ii = 0; ii < 4; ++ii){ int pos = (y+of1y[ii])*n + (x+of1x[ii]); if(!visited[pos] && a[pos] == '#'){ visited[pos] = 1; Q.push(pos); } } } for(int ii = 0; ii < 8; ++ii){ int pos = (y+of2y[ii])*n + (x+of2x[ii]); if(!visited[pos] && a[pos] == '#'){ visited[pos] = 2; Q.push(pos); } } }while(!Q.empty()); } } printf("%d", cnt); return 0; }
相关文章推荐
- Android开发Vitamio开发框架Audio音频播放失败
- 自己动手做简易搜索引擎
- Excel文件读取
- hdoj 2151 Worm【动态规划】
- 数据结构(Java)——栈的实现总结
- 10.UIImageView图片视图
- 二维码的生成细节和原理
- 黑马视频-SQL之case
- 为什么需要定义虚的析构函数?
- javaScript-引用类型(一)
- SQLiteDataBase(通过测试类测试写好的SQLite的相关数据库操作)
- GLib中的数据类型及操作
- Git上手(终结)
- centos联网问题(自动ip)
- 张国祥老师在宁波麒麟贸易集团公司讲授制度建设方法
- c++primer第十章习题(1)
- Java MD5加密算法的实现
- Order to Cash Process
- 关于堆与栈的区别
- linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析