思路:
利用乙個估計函式g[i]=dis[i]+len。其中len為佇列出來的點當前已經走了的距離。dis[i]為該點到終點的最短路徑。這樣我們只要將點按g[i]的公升序在佇列你排序,每次取出最小的g[i]值的點。其意義就是每次找最短的能到終點的點。第一次找到就是最短路徑,第二次就是就是第二短,第三次就是...順推
#include#include#include
#include
#include
#include
#define maxn 1010
#define maxm 200200
#define inf 10000000
using
namespace
std;
intdis[maxn],vi[maxn],head[maxn],e,map[maxn][maxn],n,m,cnt[maxn];
struct
edgeedge[maxm];
struct
point
};void
init()
}void add(int u,int v,int
val)
void dijkstra(int
s)
if(min==inf) break
; vi[u]=1
;
for(j=1;j<=n;j++)
}}int a_star(int s,int t,int
k) }
return -1;}
intmain()
scanf(
"%d%d%d
",&s,&t,&k);
dijkstra(t);
if(s==t)
k++;
if(dis[s]==inf)
printf(
"%d\n
",a_star(s,t,k));
}return0;
}
POJ 2449 第K短路 A 演算法
給定一張n個點,m條邊的有向圖,求從起點到終點t的第k短路的長度。求第k短路,我們先回憶一下dijkstra求最短路的方法。每次鬆弛了乙個節點,則將該節點放入優先佇列,然後在取優先佇列的第乙個點,即源點到該點距離最短的點,再用該點去鬆弛其他的點。最終求出的距離就是單源最短距離。換句話說,就是用優先佇...
POJ 2449 求第K短路
第一道第k短路的題目 qaq 拿裸的dijkstra 不斷擴充套件的a 給2000ms過了 題意 大意是 有n個station 要求從s點到t點 的第k短路 不過我看題意說的好像是從t到s 可能是出題人寫錯了 從這題中還真的學到了很多 1.第k短路的演算法 a 還有用邊表實現dij 注 以下部份資料...
poj2449 第k短路 (單源最短路徑 A )
題意 題目的意思很明確,就是讓你求s到t的第k短路。不過有乙個trick點就是必須要經過路徑,也就是說如果s t的話,在算第k短路時不能算s到t為0這條路。題解 基本就是裸的第k短路,而第k短路是單源最短路和a 演算法的組合。對於a 演算法,都知道f n g n h n 這裡h n 為啟發式函式。我...