#include #include 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; queueq; for(int i=0;i>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=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=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_queueQ; 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<=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=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 */