首先是dijkstra演算法,dijkstra演算法適用於邊權為正的情況,它可用於計算正權圖上的單源最短路,即從單個源點出發,到所有結點的最短路,該演算法同時適用於有向圖和無向圖。給出**的時間複雜度為o(mlogn),m為邊的數目,n為點的數目。
struct edge //初始化邊
}; struct heapnode
};//把該演算法用到的資料結構封裝到乙個結構體中
struct dijkstra
edges.clear(); }
//新增邊
void addedge(int from,int to,int dist)
//主體演算法
void dijkstra(int s)
d[s] = 0;
memset(done,0,sizeof(done));
q.push((heapnode));
while(!q.empty())
done[u] = true;
for(int i = 0; i < g[u].size(); i++));}}
} }}dij;
接下來是spfa演算法,也是求單源最短路,該演算法解決了dijkstra演算法不能解決負邊權的問題,該演算法還有乙個功能,就是判斷乙個圖是否含有負圈。時間複雜度最壞是o(mn),不過在實踐中,往往只需要很短的時間就能求出最短路,這個演算法其實還有幾個優化。
struct edge //初始化邊
}; //把該演算法用到的資料結構封裝到乙個結構體中
struct spfa
edges.clear(); }
void addedge(int from,int to,int dist)
bool spfa(int s)
d[s] = 0;
q.push(s);
inq[s] = true;
while(!q.empty())}}
}} return true;
}}sp;
然後就是floyd演算法,求任意兩點之間的最短路
for(int i = 1; i <= n; i++)
else }}
for(k = 1; k <= n; k++)
} }}
最短路SPFA演算法模板
其實如果是最短路的裸題的話是不用寫這種傳參的spfa的,直接定義全域性變數就好了,但是很多題都是要求兩點甚至更多點到其他點最短路,因此加上了引數。include include include include define maxn 10005 define inf 0x3f3f3f3f using...
最短路 Dijkstra演算法模板
最短路 dijkstra演算法 不能處理負權邊 未優化 時間複雜度為o n 2 n為頂點數 堆優化 時間複雜度大概為o m n logm m為邊數 模板題 未優化 p3371 模板 單源最短路徑 弱化版 模板題 堆優化 p4779 模板 單源最短路徑 標準版 code 未優化 include inc...
floyd 演算法 最短路 模板
今天學了個最簡單的最短路演算法 真的超簡單的.用鄰接矩陣存圖,然後開始我們的蒂花之秀 floyd 運用動態規劃的思想,列舉每個點的最短路徑 狀態轉移方程 map i,j min map i,j 表示i到j的最短距離,k是窮舉i,j的點 意思就是從i k j的距離 當然,如果這條路沒有通的話,還必須特...