K最短路问题(A*算法)

问题

在有向带权图G,求从s到t的第k短路(不严格递增)的长度。

A*

算法通过一个估价函数f(x)来估计图中的当前点p到终点的距离,并由此决定它的搜索方向;
设g(x)表示走当前路径到x的长度,dis(x,y)表示x到y的最短距离,由于y只有等于t时才有用,所以我们可以连反向边,然后从t出发跑一遍最短路得到。
令f(x)=g(x)+dis(x,t)
建一个优先队列,初始将源点s加入到队列中;
每次从优先队列中取出f(x)最小的点x来扩展,并弹出队列;
将扩展出的x的邻接点的信息加入队列;
当x=t,计算t的出队次数,达到k时,当前的f(t)即为所求;
该算法实现起来较为简单,但理论复杂度为O(nk)(一个点的入队次数超过k时,显然不可能成为答案,所以不必再扩展)容易被卡掉。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值