Lake counting
Time limit:1000 ms |
|
Memory limit:65536 K |
Total submissions:20782 |
|
Accepted:10473 |
Description
Due to recent rains, water has pooled in varous 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 wowould like to figure out How sort 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 distriof Farmer John's field, determine how he 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
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
Water before going to bed.
#include <stdio.h>#include <string.h>#define maxn 102char G[maxn][maxn];int n, m;const int mov[][2] = {0, 1, 0, -1, 1, 0, -1, 0, 1, -1, -1, 1, 1, 1, -1, -1};void DFS(int x, int y) {G[x][y] = '.';int i, j, nx, ny;for(i = 0; i < 8; ++i) {nx = x + mov[i][0];ny = y + mov[i][1];if(nx >= 0 && nx < n && ny >= 0 && ny < m && G[nx][ny] == 'W')DFS(nx, ny);}}int main() {int i, j, ret;while(scanf("%d%d", &n, &m) == 2) {for(i = 0; i < n; ++i)scanf("%s", G[i]);ret = 0;for(i = 0; i < n; ++i)for(j = 0; j < m; ++j)if(G[i][j] == 'W') {DFS(i, j);++ret;}printf("%d\n", ret);}return 0;}
Poj2386 Lake counting [DFS]