10分求助
#include<bits/stdc++.h>
using namespace std;
bool vis[510][510];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int n,m,a,b;
int x[510],y[510];
int X[510],Y[510];
struct node{
int zx,zy,zt;
};
queue<node> q;
int ans[510][510];
void bfs(){
while(!q.empty()){
node ct=q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=ct.zx+dx[i],ny=ct.zy+dy[i];
if(nx<1||nx>n||ny<1||ny>m)continue;
if(vis[nx][ny]==true)continue;
vis[nx][ny]=true;
q.push(node{nx,ny,nt});
ans[nx][ny]=ans[ct.zx][ct.zy]+1;
}
}
}
int main(){
cin>>n>>m>>a>>b;
for(int i=1;i<=a;i++){
cin>>x[i]>>y[i];
vis[x[i]][y[i]]=true;
q.push(node{x[i],y[i],0});
}
for(int i=1;i<=b;i++){
cin>>X[i]>>Y[i];
}
bfs();
for(int i=1;i<=b;i++){
cout<<ans[X[i]][Y[i]]<<"\n";
}
return 0;
}