#include <iostream> #include <algorithm> #include <stdio.h> #include <math.h> #include <vector> #include <string> #include <cstring> #include <sstream> using namespace std; #define input freopen("input.txt","r",stdin) #define output freopen("output.txt","r",stdout) #define For1(i,a,b) for (i=a;i<b;i++) #define For2(i,a,b) for (i=a;i<=b;i++) #define Dec(i,a,b) for (i=a;i>b;i--) #define Dec2(i,a,b) for (i=a;i>=b;i--) #define Sca(x) scanf("%d",&x) #define Fill(x,a) memset(x,a,sizeof(x)) #define MAXN 0x7fffffff struct node { int x,y,time; }que[100]; int dir_x[]={0,1,-1,0,0}; int dir_y[]={0,0,0,1,-1}; int map[10][10]; bool book[10][10]; int main() { int n,m,t,i,j,k; int sx,sy,ex,ey;//sx==startx,sy==starty,ex==endx,ey==endy char in[10]; while(cin>>n>>m>>t) { Fill(map,0); Fill(book,0); if (!n&&!m&&!t) break; For2(i,1,n) { cin>>in; For2(j,1,m) if (in[j-1]=='S') map[i][j]=0,sx=i,sy=j; else if (in[j-1]=='D') map[i][j]=0,ex=i,ey=j; else if (in[j-1]=='X') map[i][j]=1; }//如何处理字符 if (sx==ex&&sy==ey) { cout<<"YES"<<endl; continue; } int head=1,tail=1; que[head].x=sx,que[head].y=sy,que[head].time=0; book[sx][sy]=1; while(head<=tail) { int newx,newy; For2(k,1,4)//四种方向 { newx=que[head].x+dir_x[k]; newy=que[head].y+dir_y[k]; if (newx>0&&newx<=n&&newy>0&&newy<=m&&!book[newx][newy]&&!map[newx][newy]) //在地图之内,未访问过,地图可走 { book[newx][newy]=1; tail++; que[tail].x=newx; que[tail].y=newy; que[tail].time=que[head].time+1; if (newx==ex&&newy==ey) if (que[tail].time<=t) cout<<"YES"<<endl,tail=100;//结束条件 else cout<<"NO"<<endl,tail=100;//结束条件 } } head++; } } return 0; }