哦耶~我过了~喜洋洋~
因为脑子短路莫名其妙WA了好久,让自己散散心之后终于过了
#include<cstdio>
#include<cmath>
char map[8][8];
int n,m,t,tnow,tmin,starti,startj,doori,doorj;
bool dfs(int i,int j){
tmin=abs(doori-i)+abs(doorj-j);
if(t-tnow<tmin||(t-tnow-tmin)%2) return false;
if(tnow==t&&map[i][j]!='D') return false;
if(tnow<t&&map[i][j]=='D') return false;
if(tnow==t&&map[i][j]=='D') return true;
tnow++;
map[i][j]='X';
if(i<n&&map[i+1][j]!='X'&&dfs(i+1,j)) return true;
if(i>1&&map[i-1][j]!='X'&&dfs(i-1,j)) return true;
if(j<m&&map[i][j+1]!='X'&&dfs(i,j+1)) return true;
if(j>1&&map[i][j-1]!='X'&&dfs(i,j-1)) return true;
tnow--;
map[i][j]='.';
return false;
}
int main(){
int i,j;
while(scanf("%d %d %d\n",&n,&m,&t)){
if(n+m+t==0) break;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
while(scanf("%c",&map[i][j])&&map[i][j]=='\n');;
if(map[i][j]=='S') {starti=i;startj=j;}
if(map[i][j]=='D') {doori=i;doorj=j;}
}
tnow=0;
if(dfs(starti,startj)) printf("YES\n");
else printf("NO\n");
}
return 0;
}