Lake Counting
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. Input * Line 1: Two space-separated integers: N and M 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: Source |
include <iostream>
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
const int SIZE=105;
char mp[SIZE][SIZE];
void dfs(int i,int j)
{
if(mp[i][j-1]=='W')
{
mp[i][j-1]='.';
dfs(i,j-1);
}
if(mp[i][j+1]=='W')
{
mp[i][j+1]='.';
dfs(i,j+1);
}
if(mp[i-1][j]=='W')
{
mp[i-1][j]='.';
dfs(i-1,j);
}
if(mp[i+1][j]=='W')
{
mp[i+1][j]='.';
dfs(i+1,j);
}
if(mp[i-1][j-1]=='W')
{
mp[i-1][j-1]='.';
dfs(i-1,j-1);
}
if(mp[i-1][j+1]=='W')
{
mp[i-1][j+1]='.';
dfs(i-1,j+1);
}
if(mp[i+1][j-1]=='W')
{
mp[i+1][j-1]='.';
dfs(i+1,j-1);
}
if(mp[i+1][j+1]=='W')
{
mp[i+1][j+1]='.';
dfs(i+1,j+1);
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
int cnt=0;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cin>>mp[i][j];
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(mp[i][j]=='W')
{
dfs(i,j);
cnt++;
}
}
}
cout<<cnt<<endl;
}
return 0;
}