#include<stdio.h>
#include<string.h>
int m,n,t;
char map[10][10];
bool mark[10][10];
int tx,ty,flag;
int div[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
int fabs(int n)
{
return n>0?n:-n;
}
void dfs(int sx,int sy,int dep)
{
int i;
if(flag)
return;
if(sx==tx&&sy==ty&&dep==t)
{
flag=1;
return;
}
int temp=(t-dep)-fabs(sx-tx)-fabs(sy-ty);
if(temp<0||temp%2!=0)
return;
for(i=0;i<4;i++)
{
int dx=div[i][0]+sx;
int dy=div[i][1]+sy;
if(dx>=0&&dx<m&&dy>=0&&dy<n&&!mark[dx][dy]&&map[dx][dy]!='X')
{
mark[dx][dy]=1;
dfs(dx,dy,dep+1);
if(flag)
return;
mark[dx][dy]=0;
}
}
}
int main()
{
while(scanf("%d%d%d",&m,&n,&t)!=EOF)
{
if(n==0&&m==0&&t==0)
break;
int i,j,sx,sy;
for(i=0;i<m;i++)
{
getchar();
for(j=0;j<n;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='S')
{
sx=i;
sy=j;
}
else if(map[i][j]=='D')
{
tx=i;
ty=j;
}
}
}
getchar();
flag=0;
memset(mark,0,sizeof(mark));
mark[sx][sy]=1;
dfs(sx,sy,0);
if(flag)
puts("YES");
else
puts("NO");
}
return 0;
}
Hdu1010 - Tempter of the Bone - 深度优先搜索
最新推荐文章于 2019-08-01 09:09:29 发布