题解 | 数水坑
数水坑
https://www.nowcoder.com/practice/664ca4289fcf457ba3109fdf4a7a1a05
#include <stdio.h>
#include <string.h>
#define MAXN 105
char tdi[MAXN][MAXN];//田地网格
int vis[MAXN][MAXN];//已访问的坐标
int n,m;
int dir[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
void dfs(int x,int y){
if(x<0||x>=n||y<0||y>=m||tdi[x][y]!='W'||vis[x][y]){
return;
}
vis[x][y]=1;//标记已访问
for(int i=0;i<8;i++){
int nx=x+dir[i][0];
int ny=y+dir[i][1];
dfs(nx,ny);
}
}
int main() {
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%s",tdi[i]);
}
memset(vis,0,sizeof(vis));
int count=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(tdi[i][j]=='W'&&!vis[i][j]){
count++;
dfs(i,j);
}
}
}
printf("%d\n",count);
return 0;
}
