spider68

grid dijkstra hackerearth

May 25th, 2020
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef pair<int, int> ipair;
  5. int mx=INT_MAX,m,n;
  6. char v[1001][1001];
  7. int dist[1001][1001];
  8. int r[]={1,-1,0,0};
  9. int k[]={0,0,1,-1};
  10. void dijkstra(int i,int j)
  11. {
  12.     dist[i][j]=0;
  13.     priority_queue< pair<int,ipair>,vector<pair<int,ipair>> , greater<pair<int,ipair>> >pq;
  14.     pq.push(make_pair(0,make_pair(i,j)));
  15.     while(!pq.empty())
  16.     {
  17.         int x,y;
  18.         x=pq.top().second.first;
  19.         y=pq.top().second.second;
  20.         pq.pop();
  21.         for(int t=0;t<4;t++)
  22.         {
  23.              int x1=x+r[t];
  24.              int y1=y+k[t];
  25.              if(x1>=0 && x1<m && y1>=0 &&y1<n)
  26.              {
  27.                  if(v[x1][y1]!='*')
  28.                  {
  29.                      if(dist[x1][y1]>dist[x][y]+1)
  30.                      {
  31.                          dist[x1][y1]=1+dist[x][y];
  32.                          pq.push(make_pair(dist[x1][y1],make_pair(x1,y1)));
  33.                      }
  34.                  }
  35.              }
  36.         }
  37.     }
  38. }
  39. int main() {
  40.     int q,s1,s2,i,j;
  41.     cin>>m>>n>>q;
  42.     for(i=0;i<m;i++)
  43.     for(j=0;j<n;j++)
  44.     dist[i][j]=INT_MAX;
  45.  
  46.     for(i=0;i<m;i++)
  47.     for(j=0;j<n;j++)cin>>v[i][j];
  48.     cin>>s1>>s2;
  49.     dijkstra(s1-1,s2-1);
  50.     for(i=0;i<q;i++)
  51.     {
  52.         int a,b;
  53.         cin>>a>>b;
  54.         a--;
  55.         b--;
  56.         if(dist[a][b]!=mx)cout<<dist[a][b]<<endl;
  57.         else cout<<-1<<endl;
  58.     }
  59. }
Add Comment
Please, Sign In to add comment