题目
分析
代码
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
int map[1001][1001],dis[1001][1001],vis[1001][1001];
int fx[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int xx,yy,n;
void bfs()
{
queue<int> q;
memset(dis,0x3f,sizeof(dis));
while (!q.empty()) q.pop();
q.push(0+500); q.push(0+500); dis[500][500]=0; vis[0+500][0+500]=1;
while (!q.empty())
{
int x=q.front(); q.pop(); int y=q.front(); q.pop();
for (int i=0;i<=3;i++)
{
int ax=x+fx[i][0],ay=y+fx[i][1];
if (ax<0||ay<0||ax>1000||ay>1000||map[ax][ay]==1||vis[ax][ay]==1) continue;
dis[ax][ay]=min(dis[ax][ay],dis[x][y]+1);
if (ax==xx&&ay==yy) return;
q.push(ax); q.push(ay); vis[ax][ay]=1;
}
}
}
int main()
{
scanf("%d%d%d",&xx,&yy,&n);
xx+=500; yy+=500;
for (int i=1,a,b;i<=n;i++)
{
scanf("%d%d",&a,&b);
map[a+500][b+500]=1;
}
bfs();
cout<<dis[xx][yy];
return 0;
}