#include <stdio.h>
char v[8][8];
int ci,cj,ct;
int n,m,t;
int dfs()
{
if(ci < 0 || cj < 0 || ci >= n || cj >= m)
return 0;
if(v[ci][cj] == 2)
if(ct == t)
return 1;
else
return 0;
else if(v[ci][cj]) {
ct++;
v[ci][cj] = 0;
ci++;
if(dfs())
return 1;
ci--;
ci--;
if(dfs())
return 1;
ci++;
cj++;
if(dfs())
return 1;
cj--;
cj--;
if(dfs())
return 1;
cj++;
v[ci][cj] = 1;
ct--;
}
return 0;
}
int main()
{
char c;
int i,j,d;
while(scanf("%d%d%d",&n,&m,&t),n | m | t) {
for(i = 0;i < n;i++)
for(j = 0;j < m;j++) {
scanf(" %c",&c);
v[i][j] = 0;
switch(c) {
case 'S':
ci = i;
cj = j;
case '.':
v[i][j] = 1;
break;
case 'D':
d = i + j;
v[i][j] = 2;
}
}
if((d = d - ci - cj) < 0)
d = -d;
if(d > t || (d + t) & 1)
puts("NO");
else {
ct = 0;
puts(dfs()? "YES": "NO");
}
}
return 0;
}
HDOJ 1010
最新推荐文章于 2019-07-17 21:08:41 发布