Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define FOR(i,a,b) for(i=a;i<=b;i++)
- using namespace std;
- #define mp(x,y) make_pair(x,y)
- int h,k,i,N,a[5010],b[5010],t,u,d[1005][1005],j,x,y;
- std::queue < pair<int,int> > q;
- bool kt[2005][2005];
- int main(){
- cin>>h>>k>>N;
- FOR(i,0,1005)
- FOR(j,0,1005) { kt[i][j]=true; d[i][j]=INT_MAX-1;}
- FOR(i,1,N){ cin>>a[i]>>b[i]; kt[a[i]+501][b[i]+501]=false;}
- d[h+501][k+501]=0;
- q.push(mp(h,k));
- //cout<<endl;
- while (q.size()!=0)
- {
- x=q.front().first;
- y=q.front().second;
- kt[x+501][y+501]=false;
- if ((abs(x)<=500) && (abs(y)<=500))
- {
- if (kt[x+501+1][y+501]==true) { q.push(mp(x+1,y)); kt[x+501+1][y+501]=false;}
- if (kt[x+501-1][y+501]==true) { q.push(mp(x-1,y)); kt[x+501-1][y+501]=false;}
- if (kt[x+501][y+501+1]==true) { q.push(mp(x,y+1)); kt[x+501][y+501+1]=false;}
- if (kt[x+501][y+501-1]==true) { q.push(mp(x,y-1)); kt[x+501][y+501-1]=false;}
- }
- d[x+501][y+501]=min(min(min(min(d[x+1+501][y+501]+1,d[x-1+501][y+501]+1),d[x+501][y+501-1]+1),d[x+501][y+501+1]+1),d[x+501][y+501]);
- if ((x==0)&& (y==0)) break;
- q.pop();
- // cout<<x<<" "<<y<<" "<<d[x+501][y+501]<<endl;
- }
- cout<<d[501][501];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement