cf 442 div2 D bfs最短路

来源:互联网 发布:收看电视直播的软件 编辑:程序博客网 时间:2024/05/25 01:35

题意:本题就是说 给你一个n m的矩阵 n,m<=1000 每一个位置要么是'.' (可行) 要么是‘#’ (不可行) 每一秒 我们可以走1~k 步 问由(x1 y1)到(x2,y2)的最短用时

思路:不难想到是一个裸的bfs题目,但我最终tle了 orz  我自己的优化是这样的 对于当前位置 x,y 如果现在他前进的方向 之前走过 我们记录一个跳转的值 表示从这一位置能跳过的长度 这样能够减少不必要的判断(写丑了) 

本题还有一些重要剪枝 :1 我们在拓展位置的时候 如果拓展到答案直接退出 而不是等到从queue 中front 出答案才break 这样的速度能差出几倍  因为前者相当于遍历完深度为ans-1 即可 而后者要遍历出来 ans 层才可以。

2 这个剪枝是本题核心剪枝:我们考虑 一个时间戳 表示到达每一个位置的最短时间 对于 要到达的位置如果 nxt>t[x][y] 那么x,y 位置及其之后不用在找了 (这样能够减少许多循环 也能减少许多 结点) 

原创粉丝点击