简单dfs
求有几块水
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,num;
char mp[110][110];
void dfs(int x,int y) {
if (x<0 || y<0 || x>=n || y>=m) return;
if (mp[x][y]=='.') return;
mp[x][y]='.';
for (int dx=-1;dx<=1;dx++) { //八方向的写法
for (int dy=-1;dy<=1;dy++) {
dfs(x+dx,y+dy);
}
}
return;
}
int main()
{
while (~scanf ("%d%d",&n,&m)) {
for (int i=0;i<n;i++)
scanf ("%s",mp[i]);
num=0;
for (int i=0;i<n;i++) {
for (int j=0;j<m;j++) {
if (mp[i][j]=='W') {
num++;
dfs(i,j);
}
}
}
printf ("%d\n",num);
}
return 0;
}