社区讨论
全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 条回复,欢迎继续交流。
正在加载回复...