poj 2449 第k短路徑

2022-05-22 07:30:12 字數 1023 閱讀 6969

思路:

利用乙個估計函式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 為啟發式函式。我...