Advertisement
elephantsarecool

labyrinth (wave,queue)

Dec 6th, 2017
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include<iostream>
  2. #include<queue>
  3. using namespace std;
  4. char a[1111][1111];
  5. int ans[1111][1111],n,m;
  6. void wave(int x,int y)
  7. {
  8.     queue<pair<int, int> > q;
  9.     pair<int, int> p;
  10.     q.push(make_pair(x, y));
  11.     while(!q.empty())
  12.     {
  13.        p = q.front();
  14.        q.pop();
  15.        x = p.first; y = p.second;
  16.        if(x-1>=0 && a[x-1][y]!='#' && !ans[x-1][y]){
  17.           ans[x-1][y]=ans[x][y]+1;
  18.           q.push(make_pair(x-1, y));
  19.        }
  20.        if(y+1<m && a[x][y+1]!='#' && !ans[x][y+1]){
  21.           ans[x][y+1]=ans[x][y]+1;
  22.           q.push(make_pair(x, y+1));
  23.        }
  24.        if(x+1<n && a[x+1][y]!='#' && !ans[x+1][y]){
  25.           ans[x+1][y]=ans[x][y]+1;
  26.           q.push(make_pair(x+1, y));
  27.        }
  28.        if(y-1>=0 && a[x][y-1]!='#' && !ans[x][y-1]){
  29.           ans[x][y-1]=ans[x][y]+1;
  30.           q.push(make_pair(x, y-1));
  31.        }
  32.    }
  33. }
  34. int main()
  35. {
  36.    int i, j,startx,starty,endx,endy;
  37.    cin>>n>>m;
  38.    for(i=0; i<n; i++)
  39.       for(j=0; j<m; j++)
  40.       {
  41.           cin>>a[i][j];
  42.           if(a[i][j]=='*'){startx=i;starty=j;}
  43.           if(a[i][j]=='$'){endx=i;endy=j;}
  44.       }
  45.    wave(startx,starty);
  46.    cout<<ans[endx][endy];
  47.    return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement