全WA玄关求调
查看原帖
全WA玄关求调
881317
spessert楼主2024/5/11 10:54

本地全过但还是全WA

#include <bits/stdc++.h>   
using namespace std;  
int res=0,n,m;
char mp[505][505];
bool vis[505][505];
int dirx[]={1,0,-1,0};
int diry[]={0,1,0,-1};
struct AXI{
	int x,y;
};
queue<AXI> qu;
void bfs(int x,int y){
	qu.push({x,y});
	vis[x][y]=true;
	while(!qu.empty()){
		auto t=qu.front();
		qu.pop();
		for(int i=0;i<4;i++){
			int tx=t.x+dirx[i];
			int ty=t.y+diry[i];
			if(tx<1||ty<1||tx>n||ty>m||vis[tx][ty]||mp[tx][ty]=='*'){
				continue;
			}
			qu.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];
   	}
   }
   //扫描边界上的0,给连通块染色
   for(int i=1;i<=n;i++){
   	if(mp[1][i]=='0'&&!vis[1][i]){
   		bfs(1,i);
   	}
   	if(mp[i][1]=='0'&&!vis[i][1]){
   		bfs(i,1);
   	}
   	if(mp[n][i]=='0'&&!vis[n][i]){
   		bfs(n,i);
   	}
   	if(mp[i][n]=='0'&&!vis[i][n]){
   		bfs(i,n);
   	}
   }
   //统计未染色的0
    for(int i=1;i<=n;i++){
   	for(int j=1;j<=m;j++){
   		if(!vis[i][j]&&mp[i][j]=='0'){
   			res++;
   		}
   	}
   }
   cout<<res;
   return 0;  
}
2024/5/11 10:54
加载中...