#include<bits/stdc++.h>
using namespace std;
char a[101][101];
int ans;
int n,m;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void dfs(int x,int y){
a[x][y]='0';
for(int i=0;i<4;i++){
int ux=x+dx[i],uy=y+dy[i];
if(ux>=1&&ux<=n&&uy>=0&&uy<m&&a[ux][uy]!='0'){
dfs(ux,uy);
}
}
return;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++){
//cout<<i<<' '<<j<<endl;//调试用
if(a[i][j]!='0'){
//cout<<"*"<<i<<' '<<j<<' '<<a[i][j];//调试用
dfs(i,j);
ans++;
}
}
}
cout<<ans;
return 0;
}
以上ac了,但以下的为什么30分
#include<bits/stdc++.h>
using namespace std;
char a[101][101];
int ans;
int n,m;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void dfs(int x,int y){
a[x][y]='0';
int dx,dy;
for(int i=-1;i<=1;i++){
for(int j=-1;j<=1;j++){
dx=x+i;
dy=y+j;
if(dx>=1&&dx<=n&&dy>=0&&dy<m&&a[dx][dy]!='0'){
dfs(dx,dy);
}
}
}
return;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++){
//cout<<i<<' '<<j<<endl;//调试用
if(a[i][j]!='0'){
//cout<<"*"<<i<<' '<<j<<' '<<a[i][j];//调试用
dfs(i,j);
ans++;
}
}
}
cout<<ans;
return 0;
}