1 #include 2 #include 3 #include 4優化以後的#define heap pair5
//第乙個int存的是到起點的距離,第二個int存的是點的編號67
using
namespace
std;89
const
int inf = 2147483647;10
intn, m, t, cnt;
11int next[1000001], to[1000001], val[1000001], head[10001], dis[10001
];12
bool vis[1000001
];13 priority_queue , greater >q;
14//
按照第乙個int從小到大排序
1516 inline void add(int a, int b, int
c)22
23 inline void dijkstra(int s)41}
42}43}
4445
intmain()
53dijkstra(s);
54for(i = 1; i <= n; i++) printf("
%d "
, dis[i]);
55return0;
56 }
優化的迪傑斯特拉
但在某些情況下慢
所以寫個普通的迪傑斯特拉也是不錯的選擇
1普通const
int maxint = 32767;2
const
int maxnum = 10;3
intdist[maxnum];
4int
prev[maxnum];
5int
a[maxunm][maxnum];
6void dijkstra(int
v0)17 dist[v0] = 0
;18 s[v0] = true
;
19for(int i=2; i<=n; i++)
27 s[u] = true
; 28
for(int j=1; j<=n; j++)34}
35}36}
37}38 }
迪傑斯特拉堆優化
使得最短路演算法時間複雜度再次加快了乙個檔次變成了n log 2 nn log 2 n n log2 n 讓人更加頭禿 來說原理的話我建議可以講一下迪傑斯特拉的演算法思想,利用貪心,每一次走距離當前點u uu最近的點v vv,那麼我們由原點到v vv一定會是最近的,因為u uu一開始就是最近的,那麼...
迪傑斯特拉 優先佇列優化
優先佇列 是一種特殊的佇列。這種佇列會自動的將佇列裡面的元素進行排序,這種排序是可定義的。這二者如何結合呢?我們都知道。迪傑斯特拉演算法每一步都需要找屬於vb集合中找乙個距離最小的點把他加入到va集合中,每一次都需要找。所以普通版的迪傑斯特拉演算法的時間複雜度是n n。因為每一步都需要找距離最小的點...
迪傑斯特拉 優先佇列優化
今天還是搞一下這個迪傑斯特拉的優先佇列優化演算法吧。對於我們經常用的二維陣列來存圖的話,只要資料一大,就會超出記憶體,也可能tle,所以我們使用優化後的演算法。迪傑斯特拉堆優化 include include include include include includeconst int maxn...