zoukankan      html  css  js  c++  java
  • 【图论】第k短路

    A*算法:

    单源单汇第k短路:

    给定一个源点s和一个汇点t,求解从s到t的第k短路。

    建立反图,从反图中,以t为源点跑单源最短路,得到原图中i点到t点的最短路val[i](也就是反图中t点到i点的最短路)
    用val[i]作为估价函数,当前状态(dis[i],i)的距离为dis[i],把(dis[i]+val[i],i)这个状态加入优先队列。每次从优先队列中取出最小值点u,枚举其出边,把其所有的出边的所有状态(dis[u]+w+val[v],v)无条件加入优先队列。

    也就是说,整个过程中保存着任意一条从s开始的路径的状态,每次取出到t的距离估价最小的状态进行扩展,意味着从这个状态开始全部走最短路到达t。每个节点u第i次从优先队列中被取出时,对应的就是(在目的地为t的前提下)到达i的第k短状态。所以每个点只需要取出至多k次这个状态,大于k次的状态不需要更新后续状态。时间复杂度为 (O((nk+m)logm))

    可持久化可并堆优化

  • 相关阅读:
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言I博客作业02
    作业01
    java ui 点点记
    eclipse修改workspace目录
    postgres恢复
    JDK1.4和JDK1.5以及1.6
  • 原文地址:https://www.cnblogs.com/purinliang/p/14394883.html
Copyright © 2011-2022 走看看