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

HDU--1010 Tempter of the Bone(深搜+奇偶剪枝)

时间:2016-08-12 16:32:15      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

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

我认为的剪枝就是在本来的代码中加入一些附加条件使之不去进行多余的计算,防止超时

奇偶剪枝的知识链接

AC代码:

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 int n,m,t,k,flag,starex,starey,endx,endy,sum;
 6 char s[10][10];
 7 int book[10][10];
 8 int tx,ty,head,tail;
 9 struct node
10 {
11     int x,y,f;
12 }que[500];
13 int abs(int a)
14 {
15     if(a<0)
16     a=-a;
17     return a;
18 }
19 int dfs(int x,int y,int step)
20 {
21     int tx,ty;
22     int a[4]={1,-1,0,0},b[4]={0,0,1,-1};
23     if(flag==1)
24     return 0;
25     if(t==step&&x==endx&&y==endy)
26     {
27         flag=1;
28         return 0;
29     }
30     int mindis=abs(x-endx)+abs(y-endy);  /*当前点到终点的最短距离*/
31     if(mindis>t-step||(mindis+ t-step)%2!=0)
32     return 0;
33     for(int i=0;i<4;i++)
34     {
35         tx=x+a[i];
36         ty=y+b[i];
37         if(tx>=n||tx<0||ty>=m||ty<0)
38         continue;
39         if((s[tx][ty]==.||s[tx][ty]==D)&&book[tx][ty]==0)
40         {
41             book[tx][ty]=1;
42             dfs(tx,ty,step+1);
43             book[tx][ty]=0;
44         }
45     }
46     return 0;
47 }
48 int main()
49 {
50     while(~scanf("%d%d%d",&n,&m,&t))
51     {
52         sum=0;
53         if(n==0&&m==0&&t==0)
54         break;
55         for(int i=0;i<n;i++)
56         {
57             scanf("%s",s[i]);
58             for(int j=0;j<m;j++)
59             {
60                 if(s[i][j]==S)
61                 {
62                     starex=i;starey=j;
63                 }
64                 if(s[i][j]==D)
65                 {
66                     endx=i;endy=j;
67                 }
68                 if(s[i][j]==X)
69                 {
70                     sum++;
71                 }
72             }
73         }
74         if(n*m-sum-1<t)
75         {
76             printf("NO\n");
77             continue;
78         }
79         flag=0;
80         dfs(starex,starey,0);
81         if(flag==1)
82         printf("YES\n");
83         else
84         printf("NO\n");
85     }
86     return 0;
87 }
View Code

 

HDU--1010 Tempter of the Bone(深搜+奇偶剪枝)

标签:

原文地址:http://www.cnblogs.com/wang-ya-wei/p/5765380.html

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