優化迪傑斯特拉

2022-05-01 02:00:14 字數 1202 閱讀 5098

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...