hdu 1010(笔记)

来源:互联网 发布:smtp端口是多少 编辑:程序博客网 时间:2024/05/16 17:55

题意:输入一个n*m的迷宫,和一个T:可以在迷宫中生存的最大时间。S为起点,D为终点。并且,每个格子只能踩一次,且只能维持一秒,然后该块地板就会塌陷。所以你必须每秒走一步,且到D点时,所用时间为T。用深搜。

之前,误以为就是找到最短路,结果不是,而是要看是否能在所有可能的路中找到刚好满足条件的路程,后来,单用深搜,超时,所以,后来的剪枝非常重要!!!

1题目大意:这道题就是讲有一只狗要吃骨头,结果进入了一个迷宫陷阱,迷宫里每走过一个地板费时一秒,该地板就会在下一秒塌陷,所以你不能在该地板上逗留。迷宫里面有一个门,只能在特定的某一秒才能打开,让狗逃出去。现在题目告诉你迷宫的大小和门打开的时间,问你狗可不可以逃出去,可以就输出YES,否则NO

解题思路:这道题,要用到剪枝搜索来做,否则会超时。剪掉的条件是,如果可走地板数目小于给定的时间,绝对不可能得救。还有就是狗走到门的时间必须和题目给定的时间是同奇同偶的,否则也不能在指定的那秒到达门,也不可能得救,剪掉这两种情况后。就用深度搜索来做。从起点出发,深搜搜周围的路,走过的路就标记为不可走,一直搜索下去,如果是一条不归路(就是活不了啦)就回溯(标记过的点必须复原),把可能的路都搜索一遍过去,看看是否有可行方案。

2第一个关于搜索的剪枝问题,有个简单的剪枝,可是我想不到!
    太水!
     可以把map看成这样: 
    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 
    从为 的格子走一步,必然走向为 的格子 
    从为 的格子走一步,必然走向为 的格子 
    即: 
     0 ->11->0 必然是奇数步 
     0->0 1->1 必然是偶数步
     结论:
    所以当遇到从 走向 但是要求时间是奇数的,或者, 
    从 走向 但是要求时间是偶数的 都可以直接判断不可达!

原创粉丝点击