zoukankan      html  css  js  c++  java
  • hdu 1010(DFS) 骨头的诱惑

    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
    ");
    63         else
    64             printf("NO
    ");
    65     }
    66     return 0;
    67 }


  • 相关阅读:
    6-2 对象克隆
    5-2 equal getClass or instanceOf
    6-2 回调
    6-1 接口的默认方法
    认识ExtJS(05)--
    认识ExtJS(04)--常见Web框架的ExtJS改造
    MyEclipse快捷键全
    ExtJS4.1自带API打不开的问题解决
    浅析十三种常用的数据挖掘的技术&五个免费开源的数据挖掘软件
    C++ 多态
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/4706132.html
Copyright © 2011-2022 走看看