社区讨论

全WA玄关求调

P1506拯救oibh总部参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lw1ijxsm
此快照首次捕获于
2024/05/11 10:55
2 年前
此快照最后确认于
2024/05/11 16:30
2 年前
查看原帖
本地全过但还是全WA
CPP
#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;  
}

回复

7 条回复,欢迎继续交流。

正在加载回复...