同矩阵距离(多元bfs)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#define x first
#define y second
using namespace std;
typedef pair<int,int> pii;
const int N = 5e6 + 10, M = 510;
int g[M][M];
pii q[N];
int dis[M][M];
int n,m;
int aa,bb;
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int hh, tt=0;
int main(){
cin >> n >> m >> aa >> bb;
// cout <<"dsf " << endl;
// cout << n << m << aa << bb;
memset(dis,-1,sizeof(dis));
while(aa--){
int x,y;
cin >> x >> y;
q[tt++] = {x,y};
dis[x][y] = 0;//多个起点
}
while(hh < tt){
pii t = q[hh++];
for(int i = 0; i < 4; i++){
int a = t.x + dx[i], b = t.y + dy[i];
if(a >= 1 && a <= n && b >= 1 && b <= m && dis[a][b] == -1){
dis[a][b] = dis[t.x][t.y] + 1;
q[tt++] = {a,b};
}
}
}
while(bb--){
int x,y;
cin >> x >> y;
cout << dis[x][y] << endl;
}
return 0;
}