Lake Counting

Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 59523 Accepted: 28958

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

1
2
3
4
5
6
7
8
9
10
11
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

1
3

Hint

OUTPUT DETAILS:

There are three ponds: one in the upper left, one in the lower left,and one along the right side.

Source

USACO 2004 November

题目大意: 计算出相连的’W’有多少块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <vector>
//#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
char mapa[maxn][maxn];
int N,M;
void dfs(int x,int y){
mapa[x][y]='.';
int tempx;
int tempy;
for(int i=-1;i<=1;i++){
for(int j=-1;j<=1;j++){
tempx=x+i;
tempy=y+j;
if(tempx>=0&&tempx<N&&tempy>=0&&tempy<M&&mapa[tempx][tempy]=='W'){
dfs(tempx,tempy);
}
}
}
return ;

}
int main() {
// std::cout << "Hello, World!" << std::endl;

cin>>N>>M;
// vector<vector<char> > map(N,(vector<char> (M)));
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
char temp;
cin >> temp;
mapa[i][j]=temp;
}
}
//cout<<"here"<<endl;
int cnt=0;
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(mapa[i][j]=='W'){
dfs(i,j);
// cout<<cnt<<endl;
// for(int i=0;i<N;i++){
// for(int j=0;j<M;j++){
//
// cout<<mapa[i][j]<<" ";
// }
// cout<<endl;
// }
cnt+=1;
}
}
}

cout<<cnt<<endl;




return 0;
}