版权声明:~~~感谢支持! https://blog.csdn.net/qq_39897867/article/details/89602562
题目
https://www.luogu.org/problemnew/show/P1332
解题思路
就是一道很简单的广搜题。
代码
#include<cstdio>
#include<queue>
#include<cstring>
#define rep(i,x,y) for(register int i=x;i<=y;++i)
using namespace std;
int n,m,xa,xb,a[501][501],sa[4]={0,1,0,-1},sb[4]={1,0,-1,0};
queue<pair<int,int> >q;
void bfs(){
while (!q.empty()){
int x=q.front().first,y=q.front().second; q.pop();
rep(i,0,3)
if (a[x+sa[i]][y+sb[i]]==-1&&x+sa[i]<=n&&x+sa[i]>0&&y+sb[i]<=m&&y+sb[i]>0)
a[x+sa[i]][y+sb[i]]=a[x][y]+1,q.push(make_pair(x+sa[i],y+sb[i]));
}
}
int main(){
memset(a,-1,sizeof(a));
scanf("%d%d%d%d",&n,&m,&xa,&xb);
int x,y;
rep(i,1,xa) {
scanf("%d%d",&x,&y); a[x][y]=0;
q.push(make_pair(x,y));
}
bfs();
rep(i,1,xb){
scanf("%d%d",&x,&y);
printf("%d\n",a[x][y]);
}
}