hdu 1010 Tempter of the Bone

//搜索练习题,深搜广搜也行
//
437MS 240K 1511 B G++
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> char map[10][10]; int mov[4][2]={0,1,1,0,0,-1,-1,0}; int n,m,t; int flag; int xb,yb,xe,ye; void dfs(int x,int y,int k) { if(flag) return; if(x==xe && y==ye && k==t){ flag=1;return; } int temp=(t-k)-abs(x-xe)-abs(y-ye); if(temp<0 || temp&1) return; for(int i=0;i<4;i++){ int x0=x+mov[i][0]; int y0=y+mov[i][1]; if(x0<n && x0>=0 && y0<m && y0>=0 && map[x0][y0]!='X'){ map[x0][y0]='X'; dfs(x0,y0,k+1); map[x0][y0]='.'; } } return; } int main(void) { while(scanf("%d%d%d",&n,&m,&t),n+m+t) { getchar(); int sum=0; memset(map,0,sizeof(map)); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ scanf("%c",&map[i][j]); if(map[i][j]=='S'){ xb=i;yb=j; } else if(map[i][j]=='D'){ xe=i;ye=j; } else if(map[i][j]=='.') sum++; } getchar(); } if(sum+1<t){ puts("NO");continue; } flag=0; map[xb][yb]='X'; dfs(xb,yb,0); if(flag) puts("YES"); else puts("NO"); } return 0; }

 

posted @ 2013-09-11 19:43  heaventouch  阅读(108)  评论(0)    收藏  举报