Problem: Example

Input

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


Output

Yes

Solution (in CPP):

Solution:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct s
{
    int x,y;
} st,tmp,tmp1;
queue
q;
char a[205][205];
int vis[205][205];
int dx[10]= {0,0,1,-1};
int dy[10]= {1,-1,0,0};
int main()
{
    int aa,b,xx,yy;
    while(scanf("%d %d",&aa,&b)!=EOF)
    {
        int i,j;
        for(i=0; i<aa; i++)
        {
            scanf("%s",a[i]);
            for(j=0; j<b; j++)
            {
                if(a[i][j]=='%')
                {
                    st.x=i;
                    st.y=j;
                }
            }
        }
        while(!q.empty())
            q.pop();
        memset(vis,0,sizeof(vis));
        vis[st.x][st.y]=1;
        q.push(st);
        int z=0,zz=0;
        while(!q.empty())
        {
            tmp=q.front();

            q.pop();
            for(i=0; i<4; i++)
            {
                xx=dx[i]+tmp.x;
                yy=dy[i]+tmp.y;
                if(vis[xx][yy]==0&&xx>=0&&xx<aa&&yy>=0&&yy<b&&a[xx][yy]!='#')
                {
                    tmp1.x=xx;
                    tmp1.y=yy;
                    vis[xx][yy]=vis[tmp.x][tmp.y]+1;
                    if(z==0&&a[xx][yy]=='@')
                        z=vis[xx][yy];
                    if(zz==0&&a[xx][yy]=='$')
                        zz=vis[xx][yy];
                    q.push(tmp1);
                }
            }
        }
        if((z>0&&z<zz)||(zz==0))
        {
            printf("Yes\n");
        }
        else
            printf("No\n");
    }
}