#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int n,m,t;
int dir[4][2]={-1,0,0,1,1,0,0,-1};
int visit[10][10];
char map[10][10];
int flag;
int di,dj,si,sj;
void dfs(int a,int b,int dp){
if(map[a][b]=='D'&&dp==t)
{ flag=1;
return;
}
int tmp=t-dp-abs(a-di)-abs(b-dj);//剪枝
if(tmp<0||tmp%2)
return;
for(int i=0;i<4;i++)
{
int ii=a+dir[i][0];
int jj=b+dir[i][1];
if(ii>=0&&ii<n&&jj>=0&&jj<m&&!visit[ii][jj]&&map[ii][jj]!='X'){
visit[ii][jj]=1;
dfs(ii,jj,dp+1);
if(flag==1)
return;
visit[ii][jj]=0;
}
}
return;
}
int main(){
while(cin>>n>>m>>t,n+m+t){
flag=0;
int wall=0;
memset(visit,0,sizeof(visit));
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
cin>>map[i][j];
if(map[i][j]=='X')
wall++;
if(map[i][j]=='D'){
di=i;
dj=j;
}
}
if(n*m-wall<=t){
cout<<"NO"<<endl;
continue;
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(map[i][j]=='S'){
visit[i][j]=1;
dfs(i,j,0);
break;
}
if(flag==0)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
return 0;
}
hdu1010 深搜
最新推荐文章于 2021-10-25 19:11:05 发布