转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents
题目链接:http://poj.org/problem?id=1562
----------------------------------------------------------------------------------------------------------------------------------------------------------
欢迎光临天资小屋:http://user.qzone.qq.com/593830943/main
----------------------------------------------------------------------------------------------------------------------------------------------------------
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.
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.
* 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
代码例如以下:
#include <iostream> #include <algorithm> using namespace std; #include <cstring> #define TM 100+17 int N, M; char map[TM][TM]; bool vis[TM][TM]; int xx[8]={0,1,1,1,0,-1,-1,-1}; int yy[8]={1,1,0,-1,-1,-1,0,1}; void DFS(int x, int y) { vis[x][y] = true; for(int i = 0; i < 8; i++) { int dx = x+xx[i]; int dy = y+yy[i]; if(dx>=0&&dx<N&&dy>=0&&dy<M&&!vis[dx][dy]&&map[dx][dy] == 'W') { vis[dx][dy] = true; DFS(dx,dy); } } } int main() { int i, j; while(cin>>N>>M) { int count = 0; memset(vis,false,sizeof(vis)); for(i = 0; i< N; i++) { cin>>map[i]; } for(i = 0; i < N; i++) { for(j = 0; j < M; j++) { if(map[i][j] == 'W' && !vis[i][j]) { count++; DFS(i,j); } } } cout<<count<<endl; } return 0; }
版权声明:本文博客原创文章,博客,未经同意,不得转载。