Lake Counting(dfs)
2016-02-22 19:08
197 查看
Description
Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares.
Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field.
A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors.
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'.
The characters do not have spaces between them.
Output
* Line 1: The number of ponds in Farmer John's field.
Sample Input
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
Sample Output
3
Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares.
Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field.
A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors.
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'.
The characters do not have spaces between them.
Output
* Line 1: The number of ponds in Farmer John's field.
Sample Input
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; char a[100][100]; int m=0,n=0; int ad(int x,int y) { a[x][y]='.'; for(int i=-1; i<2; i++) for(int j=-1; j<2; j++) if(a[x+i][y+j]=='W'&&x+i>=0&&x+i<n&&y+j>=0&&y+j<m) ad(x+i,y+j); } int main() { int ans=0; scanf("%d%d",&n,&m); getchar(); for(int i=0; i<n; i++) { for(int j=0; j<m; j++) scanf("%c",&a[i][j]); getchar(); } for(int i=0; i<n; i++) for(int j=0; j<m; j++) if(a[i][j]=='W') { ad(i,j); ans++; } printf("%d\n",ans); return 0; }
Sample Output
3
相关文章推荐
- iOS开发之监测网络状态
- Wireshark数据抓包教程之安装Wireshark
- css不定宽块级元素居中方法二
- css不定宽块级元素居中方法二
- TelephonyManager电话管理器、监听手机来电
- 界面布局与常用资源使用
- iOS蓝牙开发(二):iOS连接外设的代码实现
- 经典dfs(depth-first search)
- java 四舍五入保留小数
- Candy
- [BZOJ 1492]货币兑换Cash
- c++ 排序算法总结
- Android 启动时间优化 <22>
- HDOJ-1081 To The Max
- iOS蓝牙开发(一)蓝牙相关基础知识
- c++ 排序算法总结
- ps切图(5)——图层原理及其操作
- database export import
- uva 10720 Graph Construction
- dstat系统分析工具的使用