【解题报告】【HDOJ1010】【DFS矩阵地图】Tempter of the Bone
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 int map[10][10]; 5 int n,m,t; 6 int si,sj,ei,ej; 7 int bx[4]={1,0,-1,0},by[4]={0,1,0,-1}; 8 int result; 9 void print(); 10 void read_operation(int i,int j,char c); 11 void read(); 12 int search(int x,int y,int t); 13 int main() 14 { 15 //freopen("1.txt","r",stdin); 16 while(scanf("%d%d%d%*c",&n,&m,&t)!=EOF&&n+m+t) 17 { 18 read(); 19 result=0; 20 if((si+sj-ei-ej+t)%2!=0||search(si,sj,t)==0) 21 printf("NO\n"); 22 else 23 printf("YES\n"); 24 } 25 return 0; 26 } 27 //*****************下面为子函数 28 29 int search(int x,int y,int t) 30 { 31 int i; 32 if(t==0)//符合题目条件 33 { 34 if(x==ei&&y==ej) return 1; 35 else return 0; 36 } 37 map[x][y]=0; 38 for(i=0;i<4;i++) 39 { 40 if(map[x+bx[i]][y+by[i]]==1&&result==0) 41 { 42 result=search(x+bx[i],y+by[i],t-1); 43 } 44 } 45 map[x][y]=1; 46 return result; 47 } 48 void read_operation(int i,int j,char c) 49 { 50 switch(c) 51 { 52 case '.':map[i][j]=1;break; 53 case'S':{si=i;sj=j;break;} 54 case'D':{ei=i;ej=j;map[i][j]=1;break;} 55 } 56 } 57 void read() 58 { 59 int i,j;char c; 60 memset(map,0,sizeof(map)); 61 for(i=1;i<=n;i++) 62 { 63 for(j=1;j<=m;j++) 64 { 65 scanf("%c",&c); 66 read_operation(i,j,c); 67 } 68 getchar(); 69 } 70 }