UVA1599 理想路径 Ideal Path

知识点:广搜

上一个BFS蓝题练习了方向处理,地图的状态处理,输出任意一条最短路,这个题练习了不一样的东西,是输出一条有第二标尺的最短路,那么原先记录任意最短路径的方法就不适用,这里采用了两个BFS的写法,之所以这么写,是利用了BFS的队列里面的状态是关于层次具有两段性的这么一个性质,首先第一个广搜我们用来找最短路路径的长度,做好标记,并且是反向搜索,从终点到起点,为什么要这样,应该是为了能把所有的最短路径给包含进来,为了下一个找路径

重点是第二个BFS,我们从起点开始搜,每次都要找距离减一的节点,同时,我们要保证,我们的队列里面的节点是单一的,也就是说,我们一次放,就放进来一层的节点,出也出一层的节点,时刻保持队列里面只有一层而不是两层的节点,一层一层的处理,因为我们是要找当前层到下面一层路径最短的节点,如果队列里面混有两层的节点显然是不行的,所有我们需要辅助的队列,首先第一次循环找出边权的最小值,输出答案,第二次循环,找出所有边权是最小值的下一层的节点,这里注意要判重,每个节点入队一次就行了,这样,就做到了一层一层的搜,当然这个也可以用vector来模拟这个队列,但是我为了使程序含义更明显,还是用了队列来做

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 5;

int n, m, tot, ver[N * 4], edge[N * 4], 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值