【解题报告】【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 }

 

posted on 2012-07-21 18:36  coding封神  阅读(116)  评论(0编辑  收藏  举报

导航