本题为洛谷:
#include<iostream>
#include<queue>
using namespace std;
int n,m,dir[8][2]={{1,0},{0,1},{0,-1},{-1,0},{-1,-1},{1,-1},{-1,1},{1,1}};
char a[112][112];
struct point{
int x,y;
point(int xx,int yy){
x=xx;
y=yy;
}
};
void dfs(int sx,int sy){
a[sx][sy]='.';
for(int i=0;i<8;i++){
int dx=sx+dir[i][0];
int dy=sy+dir[i][1];
if(0<=dx&&dx<n&&0<=dy&&dy<m&&a[dx][dy]=='W') dfs(dx,dy);
}
}
int main(){
int s=0;
cin>>n>>m;
for(int i=0;i<n;i++){
scanf("%s",a[i]);
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]=='W'){
dfs(i,j);
s++;
}
}
}
cout<<s;
return 0;
}