这是代码
#include<cstdio>
#include<queue>
using namespace std;
struct Node {
int x,y;
}node[100010];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int cnt;
int a,b;
queue<int> q;
int n,m;
int dfn[510][510];
int vis[510][510];
bool avlb(int x,int y) {
if(x<1||y<1||x>n||y>m||vis[x][y])
return 0;
return 1;
}
int main() {
scanf("%d%d%d%d",&n,&m,&a,&b);
int x,y;
for(int i=1;i<=a;i++) {
scanf("%d%d",&x,&y);
node[++cnt].x=x;
node[cnt].y=y;
q.push(cnt);
dfn[node[cnt].x][node[cnt].y]=0;
vis[node[cnt].x][node[cnt].y]=1;
}
while(!q.empty()) {
int now=q.front();
q.pop();
for(int i=0;i<4;i++) {
int tox=node[now].x+dx[i];
int toy=node[now].y+dy[i];
if(avlb(tox,toy)) {
node[++cnt].x=tox;
node[cnt].y=toy;
dfn[tox][toy]=dfn[node[now].x][node[now].y]+1;
vis[tox][toy]=1;
q.push(cnt);
}
}
}
for(int i=1;i<=b;i++) {
scanf("%d%d",&x,&y);
printf("%d\n",dfn[x][y]);
}
return 0;
}