各種最短路模板

2021-08-05 23:43:58 字數 2138 閱讀 8593

原創 

原創大佬的**格式不是我喜歡的風格...所以都被我稍作修改了下...

1.    dijkstra  普通版

#include#includeconst int n=105, inf=9999999;

int d[n], w[n][n],vis[n],n,m;

void dijkstra(int src)

}void dijkstra(int src)

}

}}int main()

return 0;

}

3. dijkstra+鄰接表(用vecor實現)+優先佇列優化

#include#include#include#include#includeusing namespace std;

const int n=105;

const int inf=9999999;

typedef pairpii;

vectorg[n];

priority_queue, greater>q;

int d[n], first[n], u[n], v[n], w[n], next[n],n,m;

bool vis[n];

// 無向圖的輸入,注意沒輸入的一條邊要看作是兩條邊

void read_graph()

}void dijkstra(int src)

} }

}int main()

return 0;

}

4.bellman-ford演算法

#include#include#include#includeusing namespace std;

const int n=20005;

const int inf=9999999;

int n, m, u[n],v[n],w[n], d[n];

// 無向圖的輸入,注意每輸入的一條邊要看作是兩條邊

inline void read_graph()

inline void bellman_ford(int src)

if(d[y]d[y]+w[i])

d[x]=d[y]+w[i];}}

}}int main()

return 0;

}

5.spfa

#include#include#include#includeusing namespace std;

const int n=20005;

const int inf=2147483646>>1;

int n, m, first[n],next[n],u[n],v[n],w[n], d[n];

bool vis[n];

queueq;

inline void read_graph()

}void spfa(int src)}}

} }int main()

return 0;

}

6.floyd演算法

#include#include#include#includeusing namespace std;

const int n=105;

const int inf=2147483646;

int n, m, d[n][n];

inline void read_graph()

int a,b,c;

for(int e=1;e<=m;e++) }

inline void floyd(int src)

{ for(int k=1;k<=n;k++)

{ for(int i=1;i<=n;i++)

{ for(int j=1;j<=n;j++)

{if(d[i][k]

最短路模板

1.dijkstra演算法 演算法思想 從某乙個點開始,找與它距離最近的乙個點,然後更新所有點到這條路徑的距離,然後再次選取乙個距離上乙個點路徑最短的點,將其加入路徑,以此進行,直到求出起點到所有點的最短距離.注意 權值不能為負,如圖 1到3的距離應該是零,但這裡結果為一 1 鄰接矩陣 複雜度 o ...

最短路模板

週六週日tyvj上有模擬賽 順便逃了周練 霧 複習了一下圖論裡的基本演算法 彷彿第一次寫最短路的手生 寫的太少了 orz dijkstra include define maxn 10001 define maxm 300001 using namespace std template void r...

最短路模板

include include include include include include define inf 0x3f3f3f3f using namespace std const int maxn 105 int dis maxn pre maxn struct edge 邊 edge ...