Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- using namespace std;
- struct node
- {
- int i;
- int j;
- int dis;
- node(){}
- node(int _i,int _j, int _dis)
- {
- i=_i;
- j=_j;
- dis=_dis;
- }
- bool operator <(const node &tmp) const
- {
- return dis< tmp.dis;
- }
- };
- char mat[1005][1005];
- bool vis[1005][1005];
- int m[1005][1005];
- int main()
- {
- int a,b;
- cin>>a>>b;
- int r2=0,c2=0;
- int r=0,c=0;
- queue<int>q;
- for(int i=0;i<a;i++)
- {
- for(int j=0;j<b;j++)
- {
- cin>>mat[i][j];
- vis[i][j]=false;
- if(mat[i][j]=='G')
- {
- q.push(i);
- q.push(j);
- q.push(0);
- vis[i][j]=true;
- }
- if(mat[i][j]=='R')
- {
- r=i;
- c=j;
- }
- if(mat[i][j]=='Z')
- {
- r2=i;
- c2=j;
- }
- }
- }
- for(int i=0;i<a;i++)
- {
- for(int j=0;j<b;j++)
- {
- m[i][j]=0;
- }
- }
- mat[r2][c2]='.';
- mat[r][c] = '.';
- while(!q.empty())
- {
- int ci=q.front();
- q.pop();
- int cj=q.front();
- q.pop();
- int k=q.front();
- q.pop();
- m[ci][cj]=k;
- if(ci+1<a && vis[ci+1][cj]==false && mat[ci+1][cj]=='.')
- {
- q.push(ci+1);
- q.push(cj);
- q.push(k+1);
- vis[ci+1][cj]=true;
- }
- if(ci-1>=0 && vis[ci-1][cj]==false && mat[ci-1][cj]=='.')
- {
- q.push(ci-1);
- q.push(cj);
- q.push(k+1);
- vis[ci-1][cj]=true;
- }
- if(cj+1<b && vis[ci][cj+1]==false && mat[ci][cj+1]=='.')
- {
- q.push(ci);
- q.push(cj+1);
- q.push(k+1);
- vis[ci][cj+1]=true;
- }
- if(cj-1>=0 && vis[ci][cj-1]==false && mat[ci][cj-1]=='.')
- {
- q.push(ci);
- q.push(cj-1);
- q.push(k+1);
- vis[ci][cj-1]=true;
- }
- }
- priority_queue<node>Q;
- Q.push(node(r,c,m[r][c]));
- for(int i = 0; i < a; i++) {
- for(int j = 0; j < b; j++) {
- vis[i][j] = false;
- }
- }
- while(!Q.empty())
- {
- node broj=Q.top();
- Q.pop();
- if(broj.i==r2 && broj.j==c2)
- {
- cout<<broj.dis;
- return 0;
- }
- if(broj.i+1<a && vis[broj.i+1][broj.j]==false && mat[broj.i+1][broj.j]=='.')
- {
- Q.push(node(broj.i+1,broj.j,min(broj.dis, m[broj.i+1][broj.j])));
- vis[broj.i + 1][broj.j] = true;
- }
- if(broj.i-1>=0 && vis[broj.i-1][broj.j]==false && mat[broj.i-1][broj.j]=='.')
- {
- Q.push(node(broj.i-1,broj.j,min(broj.dis, m[broj.i-1][broj.j]))); vis[broj.i - 1][broj.j] = true;
- }
- if(broj.j+1<b && vis[broj.i][broj.j+1]==false && mat[broj.i][broj.j+1]=='.')
- {
- Q.push(node(broj.i,broj.j+1,min(broj.dis, m[broj.i][broj.j+1])));
- vis[broj.i ][broj.j + 1] = true;
- }
- if(broj.j-1>=0 && vis[broj.i][broj.j-1]==false && mat[broj.i][broj.j-1]=='.')
- {
- Q.push(node(broj.i,broj.j-1,min(broj.dis, m[broj.i][broj.j-1])));
- vis[broj.i][broj.j - 1] = true;
- }
- }
- return 0;
- }
- /*
- 4R2343234
- 321232123
- 21G121G12
- 121232123
- G12212234
- 1221G1234
- 233**2345
- 345Z43456
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement