cf 442 div2 D bfs最短路

题意:本题就是说 给你一个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 位置及其之后不用在找了 (这样能够减少许多循环 也能减少许多 结点) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值