K短路 用dijsktra+A*啓發式搜索
當點v第K次出堆的時候,這時候求得的路徑是k短路。
A*算法有一個啓發式函數f(p)=g(p)+h(p), 即評估函數=當前值+當前位置到終點的最短距離
g(p):當前從s到p點所走的路徑長度,h(p)就是點p到目的點t的最短距離。
f(p)就是當前路徑從s走到p在從p到t的所走距離。
步驟:
1>求出h(p)。將有向邊反向,求出目的點t到全部點的最短距離,用dijkstra算法
2>將原點s加入優先隊列中
3>優先隊列取出f(p)最小的一個點p
若是p==t,而且出來的次數剛好是k次,那麼算法結束
不然,若是p出來的次數多餘k次,就不用再進入隊列中
不然遍歷p相鄰的邊,加入優先隊列中
注意:若是s==t,那麼求得k短路應該變成k++;算法