码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1010(DFS) 骨头的诱惑

时间:2015-08-06 00:12:28      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

http://acm.hdu.edu.cn/showproblem.php?pid=1010

题目大意从S出发,问能否在时间t的时候到达终点D,X为障碍

需要注意的是要恰好在t时刻到达,而不是在t时间之内

深搜,注意剪枝 剩下格子大于t时间的时候剪掉这个很好想,但还是会超时,还有一个剪枝是依靠

奇偶性剪枝

比如地图依靠奇偶性是;

0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1 可以发现偶数走一步一定到奇数,奇数走一步一定到偶数,所以当所在地的奇偶性与目的地D不一样的时候
一定走奇数步子,一样就走偶数步,判断这个来剪枝

code

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 bool flag;
 4 int n,m,t,i,j,x1,y1,x2,y2,num;
 5 int dix[]={1,0,0,-1};
 6 int diy[]={0,1,-1,0};
 7 char str[8][8];
 8 void DFS(int k,int l,int tc)
 9 {
10     int i;
11     if(tc==t && k==x2 &&l==y2)
12         flag=true;
13     if(flag==true) return;
14     if (abs(x2-k)+abs(y2-l)>t-tc)return ;  //两个回溯
15     if((abs(x2-k)+abs(y2-l))%2!=(t-tc)%2) return;
16     for(i=0;i<4;i++)
17     {
18         int dx=k+dix[i];
19         int dy=l+diy[i];
20         if(dx>=0 && dx<n && dy>=0 && dy<m && str[dx][dy]!=X)
21         {
22             str[dx][dy]=X;
23             DFS(dx,dy,tc+1);
24             str[dx][dy]=.;
25         }
26     }
27 }
28 int main()
29 {
30     while (scanf("%d %d %d",&n,&m,&t))
31     {
32         getchar();
33         if(n==0&&m==0&&t==0)
34             break;
35         num=0;
36         flag=false;
37         for(i=0;i<n;i++)
38         {
39             for(j=0;j<m;j++)
40             {
41                 scanf("%c",&str[i][j]);
42                 if(str[i][j]==S)
43                 {
44                     x1=i;y1=j;
45                 }
46                 else if(str[i][j]==D)
47                 {
48                     x2=i;y2=j;
49                     num++;
50                 }
51                 else if(str[i][j]==.)
52                 {
53                     num++;
54                 }
55             }
56             getchar();
57         }
58         str[x1][y1]=X;
59         if(num>=t)
60             DFS(x1,y1,0);
61         if(flag==true)
62             printf("YES\n");
63         else
64             printf("NO\n");
65     }
66     return 0;
67 }

 


hdu 1010(DFS) 骨头的诱惑

标签:

原文地址:http://www.cnblogs.com/JJCHEHEDA/p/4706132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!