题意
说白了就是检测连通性,题目给出干的地面和湿的地面。
我们编写DFS检测连通性,从W
进入,走过的路都标记成.
,看看能进行几次DFS,就是最终答案。注意这里需要检测8个方向。
AC代码
#include<cstdio>
void dfs(int,int);
int n,m;
char f[110][110];
int main(){
scanf("%d %d\n",&n,&m);
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
scanf("%c",&f[i][j]);
}
getchar();
}
int cnt=0;
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(f[i][j]=='W'){
dfs(i,j);
++cnt;
}
}
}
printf("%d",cnt);
return 0;
}
void dfs(int x,int y){//8个方位检测连通性,走过的路都标记成'.'
f[x][y]='.';
int nx,ny;//记录新位置
for(int i=-1;i<=1;++i){
for(int j=-1;j<=1;++j){
nx=x+i;ny=y+j;
if((0 <= nx && nx < n)&&( 0 <= ny && ny < m)&&( f[nx][ny]== 'W')){
dfs(nx,ny);
}
}
}
return ;
}
这里需要注意的是,如果你使用的是scanf读入数组的话,请不要遗漏每一行的换行符,否则就会导致读入的数组出现问题=,笔者因此改了好久的Bug😢