【解题报告】hdu1010 Tempter of the Bone

  原题请看这里。

  题目是一道迷宫类问题,独特之处在于,不需要尽少步数到达目标点,而必须经过特定步数到达终点(庙门会在特定时间开启,而且只有一瞬间)。另外,每个点只能走一次。

  由于只需要一条符合条件的路径到达目标点即可,所以采用DFS比较好。考虑到步数0 < T < 50,粗略估计(4^T),即便一些走过的点不能再走,时间复杂度仍然难以接受。

  考虑剪枝,一方面,一个显而易见的事实是,如果剩下的步数小于当前点到目标点的最小距离,则一定不能到达。

  另外,在开始DFS前,有两个判定:

     1.  如果T大于点的个数,则不能到达。(不知道会不会有这样的数据)

     2. 奇偶剪枝。图中,从0点到任意一个0点需要偶数步,到任意一个1点,需要奇数步。所以可以通过开始点,目标点与T的情况,直接进行判断。

  【解题报告】hdu1010 Tempter of the Bone_第1张图片

                          

#include
#include
#include //没加一系列头文件居然是Wa而不是Ce
const int dx[]= {0,0,0,1,-1},dy[]= {0,1,-1,0,0};
int map[10][10],used[10][10],sx,sy,tx,ty,n,m,t;
int dfs(int x,int y, int step)
{
    int i,xx,yy;
    if (step==t)
    {
        if (x==tx&&y==ty)
            return 1;
        return 0;
    }
    if (t-step


  

你可能感兴趣的:(解题报告)