POJ2386

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 ave 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

Hint

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

   DFS,并查集应该也可以,没有尝试。读题不正确,首先 W 是大写的,其次 .W 之间是没有空格的(题目说的很清楚),导致提交错误。另外,本来数据存储用的 vector<vector<char> > 完成,但是提交的时候提示 Runtime Error ,换成数组之后 Accept

代码如下:

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
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <stack>
#include <vector>

using namespace std;

int n, m;
char data[100][100];

void findPonds(int x, int y) {
data[x][y] = '.';

for (int i = -1; i < 2; i++) {
for (int j = -1; j < 2; j++) {
int xx = x + i;
int yy = y + j;
if (0 <= xx && xx <= n && 0 <= yy && yy <= m && data[xx][yy] == 'W') findPonds(xx, yy);
}
}
}

int main(int argc, char *argv[]) {
int count = 0;
char tem;
scanf("%d %d", &n, &m);
getchar();

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%c", &tem);
data[i][j] = tem;
}
getchar();
}

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (data[i][j] == 'W') {
findPonds(i, j);
count++;
}
}
}

printf("%d\n", count);

//system("pause");
return 0;
}