我的代码遍历有问题,但是又找不到具体原因,麻烦大佬看一下,谢谢(可以复制下来看一下,调试的语句已经写好了,其中样例的(5,1),(5,2)从(5,3)遍历不过去,不知道为什么)
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,id;
};
int n,m;
node off[4]={{0,1},{1,0},{-1,0},{0,-1}};
int mp[1001][1001];
bool vis[1001][1001];
int a,b;
queue<node>q;
int cnt;
void bfs(){
while(!q.empty()){
//if(cnt==b) break;
int tid=q.front().id+1;
for(int i=0;i<4;i++){
int tx=q.front().x+off[i].x;
int ty=q.front().y+off[i].y;
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&mp[tx][ty]==0&&vis[tx][ty]==0){
q.push((node){tx,ty,tid});
mp[tx][ty]=tid;
vis[tx][ty]=1;
}
if(mp[tx][ty]==-2&&vis[tx][ty]==0){
cnt++;
mp[tx][ty]=tid;
vis[tx][ty]=1;
}
}
/*
cout<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-5d",mp[i][j]);
}
cout<<endl;
}
q.pop();
//*/
}
}
int main(){
cin>>n>>m>>a>>b;
queue<node>cf;
for(int i=1;i<=a;i++){
int x,y;
cin>>x>>y;
mp[x][y]=-1;
q.push((node){x,y,0});
}
for(int i=1;i<=b;i++){
int x,y;
cin>>x>>y;
mp[x][y]=-2;
cf.push((node){x,y});
}
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-5d",mp[i][j]);
}
cout<<endl;
}
//*/
bfs();
int p=cf.size();
for(int i=1;i<=p;i++){
cout<<mp[cf.front().x][cf.front().y]<<endl;
cf.pop();
}
/*
cout<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-5d",mp[i][j]);
}
cout<<endl;
}
//*/
return 0;
}