poj 2386 Lake Counting

来源:互联网 发布:做广告用什么软件 编辑:程序博客网 时间:2024/06/06 11:49
Lake Counting
Time Limit: 1000MS
Memory Limit: 65536KTotal Submissions: 17917
Accepted: 9069

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
深搜
附代码
#include <iostream>#include <cstring>using namespace std;int n,m,ans,book[1010][1010];char a[1010][1010];int dx[] = {-1,-1,-1,0,0,1,1,1};int dy[] = {-1,0,1,-1,1,-1,0,1};void dfs(int x,int y){for(int i = 0;i<8;i++){int xx = x + dx[i];int yy = y + dy[i];if(xx >= 0 && xx < n && yy >=0 && yy < m && a[xx][yy] == 'W' && book[xx][yy] == 0){book[xx][yy] = 1;dfs(xx,yy);}}}int main(){while(cin >> n >> m){if(n == 0 && m == 0)break;memset(book,0,sizeof(book));ans = 0;for(int i = 0;i<n;i++)for(int j = 0;j<m;j++)cin >> a[i][j];for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){if(a[i][j] == 'W' && book[i][j] == 0){ans++;dfs(i,j);}}}cout<<ans<<endl;}}


 
原创粉丝点击