电路维修 (广搜变形 双端队列)

题目:https://www.acwing.com/problem/content/177/

这道题做法挺多的,洛谷上有好多,但是都需要将该迷宫转换为一张图,即对于一条边,其对角线的点相互到达需要几次旋转,若该边为'\',则左上角到右下角可以不用旋转边直接到达,而左下角到右上角则需要一次旋转,故可将该两点间边权置为1,将图建立起来。

接下来可以有两种做法,堆优化最短路跑,广搜。

这里说一下广搜:

对于普通的广搜来说,其每一次扩展一层的花费都是相同的,即这一层转移到下一层的花费一定为1,而该题中每一层间的转移的花费是不一定相同的,因为我们允许某一点到另一点花费为0,转移代价不同,故无法使用普通的队列。

这里需要用到双端队列,将扩展花费为1的从队尾入队,花费为0的从队头入队,这样每次从队头取出一个元素既满足了扩展层次单调性(非严格递增),也满足了两段性(从1或从0而来选取最优)。

既然使用了双端队列,那么就不能像普通的bfs那样去标记状态了,看图:

 

如图第一步先将1入队扩展出了四个小步都入队,像普通

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值