Poj 3669 Meteor Shower

题目大意:数组

  开始一头牛在 0 0 位置,即为左下角,会有m个陨石落下来,第i个陨石会在ti时刻落在 xi yi 的位置,与其相邻的四个点和其落到的点都会被毁掉,牛想要走到一个永远不回有任何陨石砸到的地方,求走到这个地方的最小时间,若是走不到,则输出-1.安全

  要求:牛走过的路径上,对于任何一个点,牛到这个点的时刻不得大于等于任何陨石会落在这个点上的时刻。(即,陨石一旦落在某个点上,那么在这个时刻及之后,牛都不能够从这点上走过)队列

  陨石落下的点的坐标x y均在0-300之间,时间为0-1000之间,m<=5000搜索

 

思路:im

  数组Time[x][y]记录点x y被砸到的最先时刻,假如从未被砸到,则设为-1.走的过程当中,通过了哪个点,就把那个点的Time顺便设置为走到那里的最先时刻,由于落下的陨石不会消失,因此假如通过一个地方,就不会须要再回来,由于即使晚点回来,状况也只会变得更糟罢了。时间

  走到一个Time为-1的地方,则说明到达了安全点。

  由于陨石落下的范围仅仅是0-300 因此若是到了300之外的地方,基本就是是安全的了。

  

  1.给Time标记

  注意标记的时候要判断是否已经被标记过了,若是是的,则更新为较小值。——由于这个地方卡主几回。

  2.把Cow(X=0,Y=0,Time=0)压入搜索队列中,开始搜索。

    每次从队列首提出一个点,假如这个点的到达时刻>=陨石砸到这里的时刻,则不继续搜索,不然,拓展周边四个点。

  3.提取出的队首的点若是陨石砸不到,则搜索到了安全点。

相关文章
相关标签/搜索