UVA 572 Oil Deposits
2016-07-20 19:37
375 查看
UVA-572
题意:求有多少个联通的油块(@表示油块)。解题思路:遇到一个@就开始遍历联通的油块,走过的油块改为*,统计进入多少次就好了。
/************************************************************************* > File Name: UVA-572.cpp > Author: Narsh > > Created Time: 2016年07月20日 星期三 09时53分37秒 ************************************************************************/ #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int c[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}}; char map[110][110]; bool check[110][110]; int n,m; void dfs(int x,int y) { if (!check[x][y]) return ; check[x][y]=false; for (int i = 0; i < 8; i++) if (map[x+c[i][0]][y+c[i][1]] == '@') dfs(x+c[i][0],y+c[i][1]); } int main() { while(scanf("%d%d\n",&n,&m) && n+m) { for (int i = 1; i <= n; i++) for (int j = 1; j <= m+1; j++) scanf("%c",&map[i][j]); for (int i = 1; i <= n; i++) map[i][0]=map[i][m+1]=' '; for (int i = 1; i <= m; i++) map[0][i]=map[n+1][i]=' '; memset(check,true,sizeof(check)); int ans=0; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (map[i][j] == '@' && check[i][j]) { ans++; dfs(i,j); } printf("%d\n",ans); } }
相关文章推荐
- shell脚本 - 完成商品销量排行的统计:倒插数据库法
- leetcode 151 Reverse Words in a String java 算法
- HDU 5029 Relief grain(恶心的树链剖分 + 线段树)
- [leetcode] 343. Integer Break
- 编译器之语义分析
- Biker's Trip Odometer(求平均速度)
- Python从入门到放弃(三):基本语句和语法
- __bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
- python运行不了 AttributeError: module object has no attribute getdefaultlocale
- 内存管理
- clipchildren 咸鱼app 中间 图标很大的 底部 tab栏 实现方案
- listview、scollview、webview的下拉刷新,上拉加载。效果特别好,带刷新时间和图片
- [CentOS] 结合Nginx部署DotNetCore的demo项目
- HTML5和CSS3实例教程[总结二]
- POJ 2777 Count Color
- 【Poj】-1363-Rails(栈)
- 三态门的概念
- 常用rsync命令操作梳理
- Linux 下,mysql数据库报无法登陆错误:ERROR 1045 (28000): Access denied for use
- 黑马程序员_Map集合中按value值进行排序