代码如下:
#include<iostream>
#include<queue>
using namespace std;
struct zhuobiao{
int x;
int y;
};
queue<zhuobiao> q;
int v[505][505];
int a[505][505];
struct {
int x;
int y;
} y[100005];
struct {
int x;
int y;
} z[100005];
int n,m;
int dx[8]={-1,0,0,1};
int dy[8]={0,-1,1,0};
int main()
{
int n,m;
cin>>n>>m;
int A,B;
cin>>A>>B;
for(int i=1; i<=A; i++)
cin>>y[i].x>>y[i].y;
for(int i=1; i<=B; i++)
cin>>z[i].x>>z[i].y;
for(int k=1; k<=B; k++){
for(int i=1; i<=500; i++)
for(int j=1; j<=500; j++)
v[i][j]=0;
for(int i=1; i<=500; i++)
for(int j=1; j<=500; j++)
a[i][j]=0;
q.push({z[k].x,z[k].y});
while(q.empty()){
zhuobiao wz=q.front();
v[wz.x][wz.y]=1;
q.pop();
for(int i=0; i<4; i++){
zhuobiao wz_next={wz.x+dx[i],wz.y+dy[i]};
if(wz_next.x>=n&&wz_next.y<=m&&wz_next.x>=1&&wz_next.y<=n&&!v[wz_next.x][wz_next.y]){
a[wz_next.x][wz_next.y]=a[wz.x][wz.y]+1;
q.push(wz_next);
}
}
}
cout<<a[z[k].x][z[k].y]<<endl;
}
return 0;
}