BZOJ1073 k短路(A 演算法)

2022-03-27 07:14:13 字數 1036 閱讀 4659

a*演算法,也叫啟發式搜尋,就是設計乙個預估函式,然後在搜尋的過程中進行有序的搜尋,我們設到目前狀態的花費為f(x),到目標狀態的估計花費為h(x),那麼我們按照h(x)+f(x)排序即可,這道題裡起點到目前的距離為f(x),目前到終點的最短路為g(x),然後進行暴力搜尋即可。—— by vane

#includeusing

namespace

std;

const

int n=55

;const

int m=10050

;const

int inf=1e9;

intn,m,s,t,tot,cnt,k;

inth1[n],h2[n],dis[n];

bool

in[n];

struct

edge

edge(

int to,int nxt,int

w): to(to),nxt(nxt),w(w){}

}e1[m],e2[m];

void add(int a,int b,int

c)struct

data

}t;bool

cmp(data x,data y)

void

spfa()

dis[e2[i].to]=dis[x]+e2[i].w;}}

}void

solve()

for(int i=h1[x.u];i;i=e1[i].nxt)

}if(ans.size()sort(ans.begin(),ans.end(),cmp);

for(int i=0;i1].path.size();++i)

printf(

"%d%c

",ans[k-1].path[i],(i+1)==ans[k-1].path.size()?'

\n':'-'

);}intmain()

for(int i=1;i<=m;++i)

spfa();

solve();

}

K短路(A 演算法)

給乙個有向圖,求從a點到b點的第k短路 簡單路徑 長度相同的路徑按照字典序排序 a 演算法是經過估價函式優化排序過的bfs演算法 估價函式為 f n g n h n 其中 f n 態經過狀態 n 到達最終狀態的代價估計,g n 表示由初始狀態到達狀態 n 的實際代價,h n 表示由狀態 n 到最終狀...

第K短路(A 演算法)

對於無向圖 spfa a 演算法 先用spfa求目標結點到各個結點的最短路徑 然後,取g x 為從初始結點到當前結點x的路徑長度,h x 為從x結點到目標結點的最短路徑長度,即h x 取dis x 即可,估價函式f x g x h x 對於有向圖 spfa a 演算法 顯然應將有向邊取反,然後求目標...

第K短路(A (astar)演算法)

給定一張n個點 編號1,2 n m條邊的有向圖,求從起點s到終點t的第k短路的長度,路徑允許重複經過點或邊。注意 每條最短路中至少要包含一條邊。輸入格式 第一行包含兩個整數n和m。接下來m行,每行包含三個整數a,b和l,表示點a與點b之間存在有向邊,且邊長為l。最後一行包含三個整數s,t和k,分別表...