```
#include <iostream>
using namespace std;
char a[600][600];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int n,m,ans=0;
void dfs(int x,int y){
if (x<=0||x>n||y<=0||y>m||a[x][y]=='*') return;
a[x][y]='*';
for (int i=0;i<4;i++) {
dfs(x+dx[i],y+dy[i]);
}
}
int xx,yy;
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=m;i++){
dfs(1,i);
dfs(n,i);
}
for(int i=1;i<=n;i++){
dfs(i,1);
dfs(i,m);
}
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
if (a[i][j]=='0') ans++;
}
}
cout<<ans;
}
```
没找出错哪,贴个dfs代码仅供参考
by zero_egg @ 2023-10-09 22:24:19
我第一遍和你错的一样
```
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;char a[501][501];
int cnt,n,m,x1[4]={1,-1,0,0};
int y2[4]={0,0,-1,1};
void dfs(int x,int y)
{
if(x<0||y<0||x>n+1||y>m+1||a[x][y]=='*') return;这里要不能小于0
a[x][y]='*';
for(int i=0;i<=3;i++)
{
dfs(x+x1[i],y+y2[i]);
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
dfs(0,0);这里要从零开始
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='0')cnt++;
}
}
cout<<cnt;
return 0;
}
```
by 12_Victory_04 @ 2023-10-18 16:13:28
谢谢楼上2位大佬的帮忙。有礼了!~
by levy2011 @ 2023-10-18 17:57:31
已AC,谢谢大佬指点!
by levy2011 @ 2023-11-04 11:00:49