hdu 1010 Tempter of the Bone

来源:互联网 发布:freebsd下载软件 编辑:程序博客网 时间:2024/06/06 18:49

点击打开链接

#include<stdio.h>#include<string.h>char map[9][9];int v[9][9],m,n,tim,si,sj,di,dj,flag;int d[4][2]={0,1,0,-1,1,0,-1,0};int abs(int a){if(a<0) return -a;return a;}void dfs(int x,int y,int ti){int i,j,step;if(x==di&&y==dj&&ti==tim){flag=1;return ;}if(flag||ti>=tim)return ;step=(tim-ti)-(abs(di-x)+abs(dj-y));if(step%2||step<0)return ;for(i=0;i<4;i++){inttx=x+d[i][0];int ty=y+d[i][1];if(tx<0||tx>=n||ty>=m||ty<0||map[tx][ty]=='X'||v[tx][ty])continue;v[tx][ty]=1;dfs(tx,ty,ti+1);v[tx][ty]=0;}}int main(){int i,j,num;while(scanf("%d%d%d",&n,&m,&tim),m+n+tim){memset(v,0,sizeof(v));num=0;flag=0;for(i=0;i<n;i++){scanf("%s",map[i]);for(j=0;j<m;j++){if(map[i][j]=='S')si=i,sj=j;else if(map[i][j]=='D')di=i,dj=j;else if(map[i][j]=='.')num++;}}if(num<tim-1){printf("NO\n");     continue;}if((abs(di-si)+abs(dj-sj)+tim)%2){printf("NO\n"); continue;}v[si][sj]=1;dfs(si,sj,0);if(flag)printf("YES\n");else printf("NO\n");}return 0;}


0 0
原创粉丝点击