給你乙個有向圖,求出從這個點到其他所有點的最短路徑(邊權不為負)
一看到最短路,就想到了spfa和dijkstra演算法,於是隨隨便便就寫了出來。
在乙個有向圖中,我們從起點出發,找出和它的距離最小(也就是dis)的點,再取出所有與這個點相連的邊,做一遍鬆弛。
如果從點u到點v的路徑中,有乙個中轉點k使得k.cost+dis[v}這樣子dijkstra的時間複雜度為o(n^2)。
#include #include #include using namespace std;
struct edge
;int n,m,st,dis[100001],vis[100001];
vector s[100001];
vector ::iterator it;
int main()
dis[st]=0;
for (int i=1;i<=n;i++)
;struct cmp
};int n,m,st,vis[100001];
vector s[100001];
vector ::iterator it;
priority_queue dis;
int main()
); for (int i=1;i<=n;i++)
vis[i]=2147483647;
edge a;
int b;
for (int i=1;i<=m;i++)
vis[st]=0;
dis.push((cmp));
while (!dis.empty())
{ cmp k=dis.top();
dis.pop();
if (vis[k.u]!=k.d)
continue;
for (it=s[k.u].begin();it!=s[k.u].end();it++)
if (vis[k.u]+(*it).cost蒟蒻的第一篇題解,碼風不好,講的也不清楚,希望大家多多包涵。
洛谷P4779 單源最短路徑與Dijkstra演算法
蒟蒻出品,歡迎指正 dijkstra演算法 由於字母太多,以下統一用dij代替 逃 dij演算法,使用廣度優先搜尋與貪心演算法解決單源圖的最短路徑問題,不適用於有負權邊的圖。時間複雜度 o mlogn n為頂點數,m為邊數。演算法思路 對於所需求解的圖,首先假設任意兩頂點之間距離為正無窮。然後開始加...
洛谷 P4779 模板 單源最短路徑(標準版)
求單源最短路徑。可以記住的模板有 堆優化的 dijkstra,bellman ford,spfa。堆優化的 dijkstra 演算法複雜度為 o e t dk v tem o e cdot t v cdot t o e tdk v tem 其中 e e e 是邊集大小,v v v 是點集大小,t d...
洛谷 P4779 模板 單源最短路徑(標準版)
洛谷 p4779 模板 單源最短路徑 標準版 2018 年 7 月 19 日,某位同學在 noi day 1 t1 歸程 一題裡非常熟練地使用了乙個廣為人知的演算法求最短路。然後呢?100 60 ag cu 最終,他因此沒能與理想的大學達成契約。小 f 衷心祝願大家不再重蹈覆轍。給定乙個 n 個點,...