Problem: Example

Input

2 4
%.@\$
..\$\$


Output

Yes

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(x) (x).begin(),(x).end()
const int mod=1000000007,MAX=203,INF=1<<30;
int H,W;
int dis[MAX][MAX];

vector<int> dh={0,1,0,-1},dw={1,0,-1,0};

void BFS(pair<int,int> s){
    queue<pair<int,int>> Q;
    dis[s.first][s.second]=0;
    Q.push(s);
    
    while(!Q.empty()){
        pair<int,int> a=Q.front();Q.pop();
        
        for(int i=0;i<4;i++){
            int toh=a.first+dh[i],tow=a.second+dw[i];
            
            if(0<=toh&&toh<H&&0<=tow&&tow<W&&dis[toh][tow]==INF){
                dis[toh][tow]=dis[a.first][a.second]+1;
                
                Q.push({toh,tow});
            }
        }
    }
    
}

int main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    
    cin>>H>>W;
    vector<string> S(H);
    pair<int,int> s,g;
    
    for(int i=0;i<H;i++){
        for(int j=0;j<W;j++){
            dis[i][j]=INF;
        }
    }
    for(int i=0;i<H;i++){
        cin>>S[i];
        for(int j=0;j<W;j++){
            if(S[i][j]=='@') g={i,j};
            else if(S[i][j]=='%') s={i,j};
            else if(S[i][j]=='#') dis[i][j]=-1;
        }
    }
    
    BFS(s);
    
    
    int mini=INF;
    
    for(int i=0;i<H;i++){
        for(int j=0;j<W;j++){
            if(S[i][j]=='$') mini=min(mini,dis[i][j]);
        }
    }
    
    if(mini>dis[g.first][g.second]) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
}