<pre name="code" class="cpp">#include <stdio.h> // 不知道何为 比某有人的程序慢.照他的都快改成一模一样了还是比他的慢╮(╯_╰)╭
#include <stdlib.h>
int n,m,t,dx,dy,flag,tem;
char mp[9][9];
int dir[4][2]={1,0,0,1,0,-1,-1,0};
void dfs(int x,int y,int last)//last 是剩余时间.
{
if(flag) return ;
if(last==0)
{
if(x==dx&&y==dy)
{
flag=1;
return;
}
return;
}
tem=abs(x-dx)+abs(y-dy)-last;
if(tem>0||(tem)&1) //奇偶剪枝 + 剩余时间剪枝
return;
int i,lx,ly;//下一个点
for(i=0;i<4;i++)
{
lx=x+dir[i][0];
ly=y+dir[i][1];
if(lx>=0&&lx<n&&ly>=0&&ly<m&&mp[lx][ly]!='X')
{
mp[lx][ly]='X';
dfs(lx,ly,last-1);
mp[lx][ly]='.';
}
}
}
int main()
{
int i,j,sum,sx,sy;
while(~scanf("%d%d%d",&n,&m,&t))
{
if(n==0 && m==0 && t==0)
break;
sum=0;
for(i=0;i<n;i++)
{
scanf("%s",mp[i]);
for(j=0;j<m;j++)
{
if(mp[i][j]=='X')
sum++;
else if(mp[i][j]=='S')
sx=i,sy=j;
else if(mp[i][j]=='D')
dx=i,dy=j;
}
}
if(n*m-sum <= t) //剪枝 总共的可以走的格子要多于时间
{
printf("NO\n");
continue;
}
flag=0;
mp[sx][sy]='X';
dfs(sx,sy,t);
if(flag)
puts("YES");
else
puts("NO");
}
return 0;
}