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时,显然不可能成为答案,所以不必再扩展)容易被卡掉。

你可能感兴趣的:(最短路,A)