題目
https://www.luogu.org/problem/P2873
代碼
#include<cstdio>
#include<algorithm>
#include<queue>
#define mp(x,y) make_pair(x,y)
#define rep(i,x,y) for(int i=x;i<=y;i++)
using namespace std;
const int qx[4]={0,1,0,-1},qy[4]={1,0,-1,0},N=3005;
int xx,yy,n,b[N][N];
queue<pair<int,int> >q;
int main(){
scanf("%d%d%d",&xx,&yy,&n); xx+=1000,yy+=1000;
for(int i=1,x,y;i<=n;i++) scanf("%d%d",&x,&y),b[x+1000][y+1000]=-1;
q.push(mp(1000,1000)); b[1000][1000]=1;
while (q.size()){
int x=q.front().first,y=q.front().second; q.pop();
rep(i,0,3){
int ax=x+qx[i],ay=y+qy[i];
if (b[ax][ay]!=0||b[ax][ay]==-1) continue;
if (ax<0||ay<0||ax>=N||ay>=N) continue;
b[ax][ay]=b[x][y]+1;
if (ax==xx&&ay==yy) {
printf("%d",b[ax][ay]-1);
return 0;
}
q.push(mp(ax,ay));
}
}
}
/*
1 2 7
0 2
-1 3
3 1
1 1
4 2
-1 1
2 2
*/