優先佇列優化的Dijk單源最短路演算法

2021-07-31 20:32:47 字數 817 閱讀 4662

開始以為優先佇列優化的是最短路的時間複雜度,現在看來,更多的是優化空間複雜度

我們是先用那個把圖變成樹的資料結構來儲存圖中所有的邊

如果我們用鄰接表儲存邊的話,空間複雜度為n^2也就是說我們的陣列最大能開到5000*5000

現在我們儲存邊,那麼就可以在點較多而邊較少的情況下搞定了

下面附上注釋詳盡的**

題目:poj3159 這個題目其實是差分約束+dijk不懂差分約束的話可以看我的差分約束部落格

#include #include #include #include #include #define maxn 50000

#define inf 52100001

using namespace std;

struct edge

;//儲存邊的資料結構

struct node//優先佇列的資料結構

bool operator <(const node&r) const//變成小優先佇列的好方法

};//struct node

int head[maxn];

edge edge[150100];

int dijks(int en,int beg,int n);

int main()

//這個讀入就不說了具體解釋參見我的把圖化成樹的部落格

printf("%d\n",dijks(n,1,n));

}return 0;

}int dijks(int en,int beg,int n)}}

return dis[en];//返回結果即可

}

單源最短路徑 Dijkstra 優先佇列

1找到最短距離已經確認的頂點,從它出發更新相鄰頂點的最短距離 2此後不需要關心1中的 最短距離已經確認的頂點 堆中元素共有o v 個,更新和取出都有o e 次,每次更新或取出堆的維護時間是o lo 因此該演算法的時間複雜度為o elo 輸入兩個整數v,e,分別表示有向圖 無向圖就多新增一倍的邊 的的...

單源最短路模板(dij 優先佇列)

很多人也許學了spfa,覺得簡單方便,然而呢,spfa的複雜度是o 玄學 容易被出題人出資料卡,於是我們要學用優先佇列優化的dij。如果大家理解dij演算法的核心,那麼也會很容易理解為什麼優先佇列可以優化的。沒優化前的dij,我們每次鬆弛都要遍歷1 n 1 to n 1 n,來找到dis i dis...

分支限界法 優先佇列 單源最短路徑

演算法思想 分支限界法常以廣度優先或以最小耗費 最大效益 優先的方式搜尋問題的解空間樹。在分支限界法中,每乙個活結點只有一次機會成為擴充套件結點。活結點一旦成為擴充套件結點,就一次性產生其所有兒子結點。在這些兒子結點中,導致不可行解或導致非最優解的兒子結點被捨棄,其餘兒子結點被加入活結點表中。此後,...