C 使用優先佇列實現dijkstra

2021-09-24 15:10:58 字數 1364 閱讀 7272

c++優先佇列的dijkstra解法

我使用二維陣列來儲存結果,找到了所有點之間的最短路徑

初始圖:ab

cda0

4101b

2011

c8140

14d159

100結果:ab

cda0

451b

2011

c8120

9d119

100標記陣列:用來尋找最終的路徑ab

cdaa

abab

bbbb

ccac

adbd

dd

#include

#include

#include

#include

#include

using namespace std;

struct edge};

//生成隨機圖

intgenerate_graph

(vector

*&graph)}}

for(

int i=

0;i) cout<<

'\n'

<<

'\n';}

return n;

}//演算法的開始

void

dijkstra1

(vector

*&graph,

int size)

}int tag[size]

[size]

;//trace back to find the complete result.

double tic =

clock()

;//計時

//對於每乙個節點,我都算出他和其他節點之間的最短距離,並且做標記,tag是標記陣列

for(

int i=

0;i)int j=0;

while

(j!q.empty()

)}j++;}

//列印最終結果

cout<<

' ';

for(

int k=

0;k) cout

char

('a'

+i);

for(

int k=

0;k) cout

' ';

for(

int k=

0;k) cout

clock()

;//cout<<(toc-tic)/clocks_per_sec<}

intmain()

基於STL優先佇列和鄰接表的dijkstra演算法

首先說下stl優先佇列的侷限性,那就是只提供入隊 出隊 取得隊首元素的值的功能,而dijkstra演算法的堆優化需要能夠隨機訪問佇列中某個節點 來更新源點節點的最短距離 看似可以用vector配合make heap push heap pop heap來實現這個功能,實際上手動實現就會發現問題所在。...

C 優先佇列使用

優先佇列 priority queue 普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 largest in,first out 的行為特徵。stl中的優先佇列 priori...

C 優先佇列

半題外話 優先佇列個人認為主要優點是可以在排序後進行類似於插入排序的操作,適合於需要在陣列排序後再次進行操作的題目 再由此產生一堆bug 本蒟蒻是在敲貪心的題時遇見的 弱得連個貪心都不會敲了呵 就開始了學 mo 習 ca 之旅 優先佇列的結構 佇列1.back 返回乙個引用,指向最後乙個元素 2.e...