P1596 [USACO10OCT]Lake Counting S
#include <bits/stdc++.h>
using namespace std;
char mapp[108][108];
int sum=0;
int dp[108][108]={0};
int x,y;
int dx[]={0,0,1,1,1,-1,-1,-1};
int dy[]={1,-1,0,-1,1,0,1,-1};
void f(int a,int b) {
if(mapp[a][b]=='.')
return;
else if(mapp[a][b]=='W'&&dp[a][b]==0){
for(int i=0;i<8;i++){
int x=a+dx[i];
int y=b+dy[i];
dp[a][b]=1;
if(mapp[x][y]=='W'&&dp[x][y]==0){
f(x,y);
}
}
}
}
int main(){
cin>>x>>y;
for(int i=2;i<=x+1;i++){
for(int j=2;j<=y+1;j++){
cin>>mapp[i][j];
}
}
for(int i=2;i<=x+1;i++){
for(int j=2;j<=y+1;j++){
if(mapp[i][j]=='W'&&dp[i][j]==0){
sum++;
f(i,j);
}
}
}
cout<<sum;
return 0;
}