我红了
2025-03-18 21:33:58
发布于:北京
9阅读
0回复
0点赞
原错误代码:
#include<bits/stdc++.h>
using namespace std;
struct node{int x,y;};
char mp[510][510];
int dxy[4][2]={{0,1},{1,0},{-1,0},{0,-1}},n,m;
bool vis[510][510];
void bfs(int x,int y){
memset(vis,0,sizeof vis);
queue<node> q;
q.push({x,y});
vis[x][y]=1;
while(!q.empty()){
node f=q.front();
q.pop();
for(int i=0;i<4;i++){
int dx=f.x+dxy[i][0];
int dy=f.y+dxy[i][1];
if(dx>=0 && dx<=n+1 && dy>=0 && dy<=m+1 && !vis[dx][dy] && mp[dx][dy]!='*'){
vis[dx][dy]=1;
q.push({dx,dy});
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>mp[i]+1;
}
bfs(1,1);
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]=='0' && !vis[i][j]){
ans++;
}
}
}
cout<<ans;
return 0;
}
问了一下AC狗(AC助手):
结果一看,地图边界的处理、访问标记的重置
都没有问题,问题在bfs(1,1)
和for(int j=1;j<=n;j++)
中的j<=n
中的n
上,我真的红了,所以废话不多说,答案——揭晓:
#include<bits/stdc++.h>
using namespace std;
struct node{int x,y;};
char mp[510][510];
int dxy[4][2]={{0,1},{1,0},{-1,0},{0,-1}},n,m;
bool vis[510][510];
void bfs(int x,int y){
memset(vis,0,sizeof vis);
queue<node> q;
q.push({x,y});
vis[x][y]=1;
while(!q.empty()){
node f=q.front();
q.pop();
for(int i=0;i<4;i++){
int dx=f.x+dxy[i][0];
int dy=f.y+dxy[i][1];
if(dx>=0 && dx<=n+1 && dy>=0 && dy<=m+1 && !vis[dx][dy] && mp[dx][dy]!='*'){
vis[dx][dy]=1;
q.push({dx,dy});
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>mp[i]+1;
}
bfs(0,0);
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mp[i][j]=='0' && !vis[i][j]){
ans++;
}
}
}
cout<<ans;
return 0;
}
六百六十六,演都不演了,提示:本帖子唯一出处点我
禁止未经允许转载本帖子的任何内容(标出处可以吧...)
这里空空如也
有帮助,赞一个