POJ

来源:互联网 发布:武汉大学生知乎 编辑:程序博客网 时间:2024/05/29 12:23

Lake Counting
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 36120 Accepted: 17934

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 12W........WW..WWW.....WWW....WW...WW..........WW..........W....W......W...W.W.....WW.W.W.W.....W..W.W......W...W.......W.

Sample Output

3

AC代码:

#include<cstdio>char s[110][110];int n, m;void dfs(int x, int y){int next[8][2] = {{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};s[x][y] = '.';for(int k=0;k<=7;k++){int tx, ty;tx = x + next[k][0];ty = y + next[k][1];if(tx<1 || ty<1 || tx>n || ty>m) continue; if(s[tx][ty] == 'W'){dfs(tx, ty);}}}int main(){scanf("%d%d", &n, &m);getchar();for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){scanf("%c", &s[i][j]);}getchar();}int sum = 0;for(int i = 1; i <= n; i++){for(int j = 1;j <= m; j++){if(s[i][j] == 'W'){sum++;dfs(i,j);}}} printf("%d",sum);return 0;}