K短路問題模板(spfa A )

2021-07-22 14:48:09 字數 817 閱讀 7527

給乙個圖,起點s、終點t、k,求起點到終點的第k短路。

基本思路:

首先spfa求出反向圖中求出終點t到其他所有點的距離(預處理)

再從起點開始使用優先佇列進行寬搜,用cnt記錄到達終點的次數,當cnt==k時的路徑長度即為所得。

搜尋的方向用乙個估價函式f=g+dis來確定,其中g表示起點到當前點的路徑長度,dis表示當前點到終點的最短路徑(即之前的預處理),每次擴充套件估價函式值最小的乙個。

#include

#include

#include

using

namespace

std;

const

int maxn=100010;

int n,m,dis[maxn];

int tot,head1[maxn],head2[maxn];

bool flag[maxn];

struct edge

e[maxn*2],e2[maxn*2];

struct node

};void add_edge(int u,int v,int w)

void spfa(int t)//反圖預處理dis}}

}int a_star(int s,int t,int k)

}return -1;

}int main()

cin>>s>>t>>k;//輸入起點,終點,k短路

spfa(t);

int ans=a_star(s,t,k);

cout

0;}

K短路 模板

a spfa演算法 1 將有向圖的所有邊正向 反向分別存入兩個不同的邊集 edges,edges1 中。用反向邊集,以所求終點t為源點,利用spfa或dijkstra求解出所有點到t的最短路徑,用dist i 陣列來表示點i到點t的最短距離。2 建立乙個優先佇列,將源點s加入到佇列中。3 從優先佇列...

第K短路(模板)

沒太想明白 就當存在模板吧 include include include include include include include include include include using namespace std typedef long long ll const int maxn ...

poj 2449 k短路模板

include include include include include using namespace std const int maxn 1001 const int maxm 100001 const int inf 1 30 struct edge edge e1 maxm edge...