U 1010 Tempter of the Bone 【深搜】

View Code
#include<stdio.h>
#include<string.h>
int id,jd,k,t,m,n,f[8]={0,0,1,-1,1,-1,0,0};
char s[8][8];
void dfs(int i,int j,int c)
{
int p,ii,jj;
if(i==id&&j==jd)
{
if(c==k)
t=1;
return;
}
for(p=0;p<4;p++)
{
ii=i+f[p];
jj=j+f[p+4];
if(ii>=0&&ii<m&&jj>=0&&jj<n&&s[ii][jj]!='X')
{
s[ii][jj]='X';
dfs(ii,jj,c+1);
s[ii][jj]='.';
if(t)return;
}
}
return;
}
int main()
{
int i,j,q,is,js;
while(scanf("%d%d%d",&m,&n,&k),m||n||k)
{
q=0;t=0;
for(i=0;i<m;i++)
{
scanf("%s",s[i]);
for(j=0;j<n;j++)
{
if(s[i][j]=='S')
{is=i;js=j;s[i][j]='X';t++;}
else if(s[i][j]=='D')
{id=i;jd=j;q=1;}
else if(s[i][j]=='X')
t++;
}
}
if((is+js+id+jd+k)&1||t+k>n*m)
q=0;
t=0;
if(q)dfs(is,js,0);
if(t)printf("YES\n");
else printf("NO\n");
}
return 0;
}

 

posted @ 2012-03-15 12:33  'wind  阅读(184)  评论(0编辑  收藏  举报