#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int mod=1000100087;
int a,b;
char s[510][510];
int st[510][510];
void solve(){
cin>>a>>b;
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
cin>>s[i][j];
}
}
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
queue<pair<int,int>> q;
q.push({0,0});
st[0][0]=1;
while(q.size()){
int x1=q.front().first;
int y1=q.front().second;
q.pop();
for(int i=0;i<4;i++){
int aa=x1+dx[i];
int bb=y1+dy[i];
if(aa<0||bb<0||aa>a+1||bb>b+1) continue;
if(st[aa][bb]) continue;
if(s[aa][bb]=='*') continue;
st[aa][bb]=1;
q.push({aa,bb});
}
}
int ans=0;
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(!st[i][j]&&s[i][j]=='0') ans++;
}
}
cout<<ans<<endl;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
solve();
return 0;
}
这道题本质上是想找被围墙包起来的0的数量,我们可以从当前矩阵的往外一层的(0,0)处开始BFS,只要没有围墙,洪水就能进入矩阵

京公网安备 11010502036488号