水题,直接BFS,什么都不说了
#include<iostream>
#include<cstring>
using namespace std;
#define N 1010
int map[N][N];
const int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int ex,ey;
class node
{
public:
int x,y,step;
void in(int _x,int _y,int _step)
{
x=_x;
y=_y;
step=_step;
}
}q[N*N],temp;
int bfs()
{
int head=0,tail=1;
temp.in(500,500,0);
q[head]=temp;
if( ex==500 && ey==500)
return 0;
while(head<tail)
{
temp = q[head++];
for(int i=0;i<4;i++)
{
int x = temp.x + dir[i][0];
int y = temp.y + dir[i][1];
int step = temp.step + 1;
if( x == ex && y == ey )
return step;
if( map[x][y] || x<0 || y<0 || x>1000 || y>1000)
continue;
map[x][y]=1;
q[tail++].in(x,y,step);
}
}
return 0;
}
int main()
{
int i,j,u,v,n;
// freopen("e://in.txt","r",stdin);
while(cin>>ex>>ey>>n)
{
ex+=500;
ey+=500;
memset(map,0,sizeof(map));
for(i=0;i<n;i++)
{
cin>>u>>v;
map[u+500][v+500]=1;
}
cout<<(bfs())<<endl;
}
return 0;
}