先上本篇部落格的主要內容(有一處打錯了應該是dijkstra)
時間複雜度為o(n2),多用於不存在負權邊的稠密圖(指邊數遠大於節點數)中
int g[n]
[n], dis[n]
, n, m;
//g[n][n]為鄰接矩陣用於儲存每條邊,dis[n]儲存某個點到1號點的最小距離, n為點數,m為邊數
bool visit[n]
;//儲存每個點的最短路是否確定
intdijkstra()
visit[t]
=true
;//用t更新其他點的距離
for(
int j =
1; j <= n; j++)}
return dis[n]
;}
時間複雜度為(mlogn),多用於不存在負權邊且為稀疏圖(邊數約等於節點數)中
typedef pair<
int,
int> p;
int h[n]
, ne[n]
, e[n]
, w[n]
, idx;
//用鄰接表來儲存邊
int n, m, dis[n]
;//儲存所有點到一號點的距離
bool visit[n]
;//判斷每個點的最短路是否確定
void
add(
int a,
int b,
int c)
//將邊新增到鄰接表中
intdijkstra
(void))
;//first儲存距離, second儲存編號
while
(!heap.
empty()
));}
}}return dis[n]
;}
時間複雜度為o(nm),用於存在負權邊的最短路徑,也可存在負權迴路
int n, m;
// n表示點數,m表示邊數
int dist[n]
;// dist[x]儲存1到x的最短路距離
struct edge // 邊,a表示出點,b表示入點,w表示邊的權重
edges[m]
;// 求1到n的最短路距離,如果無法從1走到n,則返回-1。
intbellman_ford()
}if(dist[n]
>
0x3f3f3f3f/2
)return-1
;return dist[n]
;}
最常用的最短路演算法之一,時間複雜度為o(m),最壞情況下為o(nm)
int h[n]
, w[n]
, ne[n]
, e[n]
, idx;
//用鄰接表儲存邊
int n, m, dis[n]
;//儲存每個點到1號點距離
bool visit[n]
;//判斷每個點是否在佇列中
void
add(
int a,
int b,
int c)
intspfa
(void)}
}}return dis[n]
;}
時間複雜度為o(n3),用於求多源最短路問題
int dis[n]
[n], n, m, k;
intfloyd()}}}
個人學習使用 最短路演算法模板
首先是dijkstra演算法,dijkstra演算法適用於邊權為正的情況,它可用於計算正權圖上的單源最短路,即從單個源點出發,到所有結點的最短路,該演算法同時適用於有向圖和無向圖。給出 的時間複雜度為o mlogn m為邊的數目,n為點的數目。struct edge 初始化邊 struct heap...
基礎最短路(模板 bellman ford)
description 在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 1...
最短路SPFA演算法模板
其實如果是最短路的裸題的話是不用寫這種傳參的spfa的,直接定義全域性變數就好了,但是很多題都是要求兩點甚至更多點到其他點最短路,因此加上了引數。include include include include define maxn 10005 define inf 0x3f3f3f3f using...