题解
2025-06-09 16:40:25
发布于:浙江
11阅读
0回复
0点赞
搜索水会蔓延到区域后直接统计0的数量
#include<bits/stdc++.h>
using namespace std;
int n,m;
char mp[505][505];
bool vis[505][505];
int fix[8]={0,0,1,-1,1,-1,0,0};
struct vals{
int x,y;
};
void bfs(int x,int y){
vis[x][y]=true;
queue<vals> q;
q.push({x,y});
while(!q.empty()){
vals f=q.front();
q.pop();
for(int i=0;i<4;i++){
int tx=f.x+fix[i];
int ty=f.y+fix[i+4];
if(vis[tx][ty] || mp[tx][ty]=='*' || tx<1 || tx>n || ty<1 || ty>m)continue;
q.push({tx,ty});
vis[tx][ty]=true;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
if(mp[i][j]=='*')vis[i][j]=true;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!vis[i][j] && mp[i][j]=='0' &&(i==1 || j==1 || i==n || j==m)){
bfs(i,j);
}
}
}
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!vis[i][j])cnt++;
}
}
cout<<cnt<<endl;
}
这里空空如也
有帮助,赞一个