#include<iostream>
#include<cmath>
using namespace std;
int di, dj;
char map[9][9];
int n, m, t;
int dir[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
bool escape; /
void dfs(int si, int sj, int cnt)
{
if(si>n || sj>m || si<=0 || sj<=0)
return;
if(si == di && sj == dj && cnt == t)
{
escape = 1;
return;
}
int temp = t-cnt - abs(si-di) - abs(sj-dj);
if(temp<0 || temp%2)
return;
for(int i = 0; i < 4; i++)
{
if(map[si+dir[i][0]][sj+dir[i][1]] != 'X')
{
map[si+dir[i][0]][sj+dir[i][1]] = 'X';
dfs(si+dir[i][0], sj+dir[i][1], cnt+1);
if(escape)
return;
map[si+dir[i][0]][sj+dir[i][1]] = '.';
}
}
return;
}
int main()
{
int si, sj;
while(scanf("%d%d%d", &n, &m, &t))
{
int wall = 0;
getchar();
if(n == 0 && m == 0 && t == 0)
break;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
scanf("%c", &map[i][j]);
if(map[i][j] == 'S')
{
si = i;
sj = j;
}
else if(map[i][j] == 'D')
{
di = i;
dj = j;
}
else if(map[i][j] == 'X')
wall++;
}
getchar();
}
if(n*m <= t+wall) { printf("NO\n"); continue; }
escape = 0;
map[si][sj] = 'X';
dfs(si, sj, 0);
if(escape) printf("YES\n");
else printf("NO\n");
}
return 0;
}
骨头的诱惑
最新推荐文章于 2022-07-15 22:20:42 发布