#include<bits/stdc++.h>
using namespace std;
int n,m,d[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
char a[510][510];
int ans;
void dfs(int x,int y){
a[x][y]='#';
for(int i=0;i<n;i++){
int sx=x+d[i][0];
int sy=y+d[i][1];
if(sx >= 0 && sy >= 0 && sx < n && sy < m && a[sx][sy] == '0') dfs(sx,sy);
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>a[i][j];
for(int i=0;i<n;i++) if(a[i][0]=='0') dfs(i,0);
for(int i=0;i<n;i++) if(a[i][m-1]=='0') dfs(i,m-1);
for(int i=0;i<m;i++) if(a[0][i]=='0') dfs(0,i);
for(int i=0;i<m;i++) if(a[n-1][i]=='0') dfs(n-1,i);
ans=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(a[i][j]=='0') ans++;
cout<<ans;
return 0;
}
这种迷宫类的问题建议用bfs做
e…我喜欢DFS
你不会把残垣断壁外的空地也算作能躲避的地方了吧?
你这边应该是for(int i=0;i<4;i++)吧
样例都对啊
我嘞个。。谢谢