hdu1010 深搜
来源:互联网 发布:python可以机器人 编辑:程序博客网 时间:2024/04/27 13:11
#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;}