P1596 [USACO10OCT] Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int m,n;
char g[N][N];
bool st[N][N]; //走/没走
int dx[]= {-1,-1,-1,0,0,1,1,1}; //八联通
int dy[]= {-1,0,1,1,-1,1,0,-1};
int sum; //水坑的数量
void dfs(int x,int y) {
for(int i=0; i<8; i++) {
int a=x+dx[i],b=y+dy[i];
if(a<0 || a>=n || b<0 || b>=m) continue; //注意判断的是a,b
if(st[a][b]) continue; //注意判断的是a,b
if(g[a][b]!='W') continue; //注意判断的是a,b
st[a][b]=true;
dfs(a,b);
}
}
int main() {
cin>>n>>m;
for(int i=0; i<n; i++) {
scanf("%s",g[i]);
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(g[i][j]=='W' && !st[i][j]) { //注意这里
dfs(i,j); //注意
sum++;
}
}
}
cout<<sum<<endl;
return 0;
}