01、题目描述
小伙伴们大家好,这里是和 【和小安一起刷题 】 系列栏目,今天我们要解决的是一道广搜题目——POJ3669 Meteor Shower。在解决题目前,你需要知道BFS的基本框架和C++< queue >库的简单使用。
题目链接: POJ3669 Meteor Shower.
题目描述:一场流星雨即将袭来,流星会对每个击中的地方以及其周围(上下左右四格)造成破坏。小明开始时位于(0, 0)位置,准备逃到一处不会被袭击到的地方(小明只能在第一象限内移动)。已知每移动1个单位长度需要1个时间单位,被流星破坏后的地方不能再进入。给出M个流星在T时刻击中的地方(X, Y),问小明能否逃到安全的地方,若能,则输出最短时间,不能则输出-1。
示例输入:
4 //流星个数
0 0 2 //流星位置和时间,位置为(0,0),时间为2
1 2 1
1 1 2
0 3 5
示例输出:
5
02、解题思路
很明显,这是一道最短路的问题,直接想到要用BFS。因为本题没有直接给出我们想要的地图,所以需要我们自己设计地图,直接用一个map二位数组存储地图,每一位置上存储流星破坏这个位置的最早时间,map存储好后,就可以直接开始BFS了。本题有几个需要注意的地方,一是map数组可以开大一点,开到305,因为小明可能要一直走到302的位置才安全,二是一定不能走回头路,本题数据量偏大,不剪枝的话容易TEL。